【问题标题】:C# All Sockets Go DownC# 所有套接字都关闭
【发布时间】:2014-03-11 02:17:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我想您已经尝试过完全禁用防火墙和防病毒软件?
  • 好点,我应该注意到我相信我已经排除了这一点。
  • 这些套接字是连接到远程机器还是本地主机?它是否发生在各种机器上,或者可能是您的测试机器上的硬件或软件问题?其他应用程序会因此受到影响吗?使用一个套接字的测试程序也会发生这种情况吗?它是什么时候发生的,在一段固定的时间之后,或者在连接的数量或传输的数据量之后?
  • 感谢大家的指导,我能够解决这个问题。我调用 WSAStartup 和 WSACleanup 的次数不均。当额外的 WSACleanup 命中时,它会关闭应用程序的所有线程中的所有套接字(根据 MSDN 文档)。我在每个启动(++)周围添加了一个简单的静态计数器,如果计数器大于 0,我都会调用 cleanup。问题解决了。最好将其关闭或附加到可能的重复项上?

标签: c# sockets debugging network-programming wsastartup


【解决方案1】:

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

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

在多线程环境中,WSACleanup 终止 Windows 套接字 所有线程的操作。

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

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2018-12-14
    • 2011-07-14
    相关资源
    最近更新 更多