【问题标题】:Why am I getting this SocketException in my C# service?为什么我的 C# 服务中出现此 SocketException?
【发布时间】:2011-09-06 14:37:38
【问题描述】:

我有一个负责从服务器读取和写入的服务。 读取和写入在不同的线程中完成。

读取线程始终处于活动状态,而写入线程仅激活以发送消息,并且在将消息写入服务器并收到响应后终止。

该服务运行了 4 天,之后,每当服务尝试从端口读取数据时,我都会不断收到此错误:

System.Net.Sockets.SocketException:无法对套接字执行操作,因为 系统缺乏足够的缓冲空间或队列已满

【问题讨论】:

  • 感谢编辑,我正在寻找编辑但找不到任何选项。

标签: c# sockets


【解决方案1】:

当您非常快速地建立大量传出连接并用完本地端口时,可能会发生这种情况。您可以阅读“临时端口范围”here

或者,您可能只是用完了套接字。使用完之后,请确保您 close 他们。

【讨论】:

  • 我有一个每次都读取的套接字,并且如果连接丢失,则实现了一个保活机制(向服务器发送保活消息并处理响应)套接字关闭并打开新套接字
  • 我意识到我并没有在仅关闭套接字时调用 close。希望这能解决问题。
【解决方案2】:

我还强烈建议您查看您的写入线程,以及您如何引用与 Socket 相关的资源。即,您是否为任何 NetworkStream 或您与 Socket 一起使用的其他对象调用 Close/Dispose?如果您仍在为问题苦苦挣扎,来自 write 线程的代码示例会很有帮助。

您可能还想通过任务管理器监控进程内存并处理使用情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 2022-07-05
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2019-02-06
    • 2018-11-17
    相关资源
    最近更新 更多