【问题标题】:winsock - An invalid argument was supplied (on bind)winsock - 提供了无效参数(绑定时)
【发布时间】:2018-10-23 12:10:17
【问题描述】:

这个问题把我逼疯了。

我创建一个套接字并设置 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() 返回错误。

【问题讨论】:

  • 你显示的代码很好,所以你没有显示的代码肯定有问题。请提供一个minimal reproducible example 来展示错误的操作。

标签: sockets udp window winsock winsock2


【解决方案1】:

原来在调用 bind() 之前,数据包已在套接字上发送。这导致 bind() 返回错误。

【讨论】:

  • 是的,这就是答案。我也是,在绑定之前发送,这导致绑定放屁。谢谢!
【解决方案2】:

根据bind() 文档:

WSAEINVAL

提供了一个无效的参数。

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

该错误表示thisSocket 已经成功调用了bind(),而您正在尝试再次bind()

【讨论】:

  • 是的,这就是文档所说的,但这不是我所看到的。变量 thisSocket 是 C++ 类的一部分,并且创建了该类的新实例....那么如何在该套接字上调用成功的绑定?
  • @user1884325 没有人可以回答这个问题,因为您还没有显示该代码。请编辑您的问题以显示您的课程及其使用方式。它显然做的事情与你预期的不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多