winsock - 提供了无效参数(在绑定时)

时间:2018-05-13 19:49:07

标签: sockets udp window winsock winsock2

这个问题让我疯狂。

我创建了一个套接字并设置了SO_REUSEADDR。

thisSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
int i = 1;
setsockopt(thisSocket , SOL_SOCKET, SO_REUSEADDR, (char *)&i, (int)sizeof(i));

当我绑定时:

sockaddr_in_t sock_addr;
memset(&sock_addr, 0, sizeof(sockaddr_in_t));

sock_addr.sin_family = AF_INET;
sock_addr.sin_port   = htons(_listeningPort);
sock_addr.sin_addr.s_addr = inet_addr("0.0.0.0");

bind(thisSocket, reinterpret_cast<sockaddr_t*>(&sock_addr), sizeof(sock_addr));

我有时会收到错误:

 "An invalid argument was supplied"

我在这里做错了什么?为什么我会收到此错误?

更新

事实证明,在调用bind()之前,数据包是在套接字上发送的。这导致bind()返回错误。

2 个答案:

答案 0 :(得分:0)

根据bind()文档:

  

WSAEINVAL

     

提供了无效参数。

     

套接字s已返回此错误已绑定到某个地址。

该错误表示thisSocket已经成功bind(),并且您正在尝试再次bind()

答案 1 :(得分:0)

事实证明,在调用bind()之前,数据包是在套接字上发送的。这导致bind()返回错误。