recvfrom 返回 Invalid argument ?

发布于 2022-09-11 15:47:04 字数 1424 浏览 33 评论 0

recvfrom 在什么情况下会返回 Invalid argument ?
我已经将最后两个参数设置为 nullptr了, 却还有这种情况发生

大致流程如下:

class socketTCP 
{
public:
 //...
private:
    int fdTCP;
    int fdUDP;
};
在这里bind
int socketTCP::Bind(const char* ip, int port) 
{
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    inet_pton(AF_INET, ip, &addr.sin_addr);
  
    int res = bind(fdTCP, (struct sockaddr*)&addr, sizeof(addr));
    res = bind(fdUDP, (struct sockaddr*)&addr, sizeof(addr));
   
    
    return 0;
}
服务器创建临时 udp sockfd 发送向客户端发送信息
void socketBus::inform(const char* ip, int port, int* tmp) 
{
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    addr.sin_addr.s_addr = inet_addr(ip);
    
    sendto(sockfd, (void *)&buffer, sizeof(buffer), 0, (struct sockaddr*)&addr, sizeof(addr));
    close(sockfd);
}
//客户端使用上面bind过的udp sockfd 接收数据
//getMysockfd(1)函数就是 return fdUDP
void socketBus::recvFrom(int* buf, int length) 
{
    int udpfd = getMysockfd(1); 
    int ret = recvfrom(udpfd, (void *)buf, length, 0, nullptr, nullptr);
  
}

然而在这个recvfrom会抛出Invalid argument错误
请问是为什么呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文