听力插座意外死亡

时间:2009-08-25 12:46:21

标签: c++ windows sockets winsock

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

10022: An invalid argument was supplied.

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

任何人都可以想到为什么监听套接字会停止监听,或者如何生成上述错误?

3 个答案:

答案 0 :(得分:3)

一些可能性:

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

  • 把手关上了。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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