C# 所有套接字都关闭

标签 c# sockets debugging network-programming wsastartup

我试图了解什么会导致给定应用程序的所有套接字关闭/关闭并且无法再次打开。

我的应用程序有多个套接字(http、ftp 等)并将运行一段时间,但在某个时候(有些确定性),所有套接字都会关闭(我可以通过 ProcMon 看到这一点>).

我遇到了可怕的Exception: An established connection was aborted by the software in your host machine异常。然后,如果我尝试再次打开套接字,我会收到一条错误消息,提示 WSAStartup 可能未被调用。

我可以使用哪些工具或技术来调试此类问题?

最佳答案

根据建议,我将其重新发布为答案。

感谢大家的指导,我才得以解决这个问题。我调用 WSAStartupWSACleanup 的次数不均匀。当额外的 WSACleanup 命中时,它会关闭应用程序所有线程中的所有 套接字(请参阅 MSDN documentation )。

In a multithreaded environment, WSACleanup terminates Windows Sockets operations for all threads.

我在每个启动项 (++) 周围添加了一个简单的静态计数器,如果计数器大于 0,则全部调用清理。问题解决了。

希望这对其他人有帮助。

关于C# 所有套接字都关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315185/

相关文章:

c - 为什么这个阻塞套接字读取返回零并且没有错误?

java - 从 Socket 读取字节数组

c# - 如何拆分双或多个空行? Regex.Split 添加不需要的字符串

c# - IObservable<T>.ToTask<T> 方法返回等待激活的任务

python套接字,当缓冲区不够大时如何接收所有消息?

node.js - NodeJS 调试在 127.0.0.1 :42457 failed: address already in use error 上启动检查器

c# - 捕获 OutOfMemoryException 使调试变得困难

java - 如何在编译期间逐步调试注释处理器?

c# - 在下拉列表中显示层次结构

c# - 如何从 asp.net mvc3 中的 ModelState 中删除以前保存的消息