recvfrom 返回 Invalid argument ?

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错误
请问是为什么呢

阅读 3.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进