监听套接字意外死亡

Posted

技术标签:

【中文标题】监听套接字意外死亡【英文标题】:listening socket dies unexpectedly 【发布时间】:2010-11-22 14:52:04 【问题描述】:

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

10022: An invalid argument was supplied.

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

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

【问题讨论】:

您是否仔细检查了所有返回值,以确保您没有收到有关该套接字上的任何错误的通知? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

一些可能性:

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

把手关闭了。

与有缺陷的 Winsock LSP 的交互。

【讨论】:

以上是关于监听套接字意外死亡的主要内容,如果未能解决你的问题,请参考以下文章

从套接字读取时出现意外行为

当我关闭蓝牙服务器套接字或蓝牙套接字时,Android 应用程序意外退出

发送图像时出现 Python 套接字错误。无法解码字节/意外 EOF

Python 套接字突然超时?

上传文件停止并在套接字异常上读取意外的 EOF

Windows 服务在执行 EndAcceptTcpClient 时意外终止 - 即在接受新的套接字客户端时