我遇到一个问题,即TCP套接字正在侦听端口,并且已经工作了很长时间 - 它处理了多个连接,并且似乎完美无缺。但是,偶尔在调用accept()创建新连接时,accept()调用失败,并且我从系统中获得以下错误字符串:
10022: An invalid argument was supplied.
显然,当您在不再侦听的套接字上调用accept()时,可能会发生这种情况,但我自己没有关闭套接字,并且没有收到有关该套接字上任何错误的通知。
任何人都可以想到为什么监听套接字会停止监听,或者如何生成上述错误?
答案 0 :(得分:3)
一些可能性:
代码的其他部分覆盖了句柄值。检查它是否已更改(在其他地方保留副本并进行比较,打印出来,在调试器中写入断点,等等)。
把手关上了。
与有缺陷的Winsock LSP的交互。
答案 1 :(得分:1)
我想到的一件事是系统待机或休眠模式。我不确定winsock库如何处理这些事件。可能是(部分)关闭了网络接口。
答案 2 :(得分:1)
调试套接字的线程(使用IDE或通过反汇编程序)可能是有意义的,并观察其执行是否可能导致其停止侦听。