winsock - 提供了一个无效参数(在绑定时)
winsock - An invalid argument was supplied (on bind)
这个问题快把我逼疯了。
我创建了一个套接字并设置了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() 到 return 错误。
根据 bind()
文档:
WSAEINVAL
An invalid argument was supplied.
This error is returned of the socket s
is already bound to an address.
该错误意味着 thisSocket
已经成功地 bind()
调用了它,而您正在尝试再次 bind()
它。
事实证明,在调用 bind() 之前,数据包正在套接字上发送。这导致 bind() 到 return 一个错误。
这个问题快把我逼疯了。
我创建了一个套接字并设置了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() 到 return 错误。
根据 bind()
文档:
WSAEINVAL
An invalid argument was supplied.
This error is returned of the socket
s
is already bound to an address.
该错误意味着 thisSocket
已经成功地 bind()
调用了它,而您正在尝试再次 bind()
它。
事实证明,在调用 bind() 之前,数据包正在套接字上发送。这导致 bind() 到 return 一个错误。