监听套接字意外死亡
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 应用程序意外退出