1

我遇到了一个问题,即 TCP 套接字正在侦听端口,并且很长一段时间以来一直在完美地工作 - 它处理了多个连接,并且似乎完美地工作。但是,有时在调用 accept() 来创建新连接时,accept() 调用会失败,并且我会从系统中收到以下错误字符串:

10022: An invalid argument was supplied.

显然,当您在不再侦听的套接字上调用 accept() 时,可能会发生这种情况,但我自己并没有关闭套接字,也没有收到有关该套接字上任何错误的通知。

谁能想到监听套接字会停止监听的任何原因,或者上面提到的错误是如何产生的?

4

3 回答 3

3

一些可能性:

  • 代码的其他部分覆盖了句柄值。检查它是否已更改(在其他地方保留一份副本并比较,打印出来,在调试器中写入断点,等等)。

  • 有什么东西关上了把手。

  • 与有缺陷的 Winsock LSP 的交互。

于 2009-08-25T12:54:04.680 回答
1

我想到的一件事是系统待机或休眠模式。我不确定winsock 库是如何处理这些事件的。可能是网络接口(部分)关闭。

于 2009-08-25T12:55:10.283 回答
1

调试套接字的线程(使用 IDE 或通过反汇编程序)并观察其执行是否有可能导致它停止侦听可能是有意义的。

于 2009-08-27T14:21:25.313 回答