为什么我在C#服务中得到这个SocketException?

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

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

该服务运行4天,之后,只要服务尝试从端口读取,我就会连续收到此错误:

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

当您非常快速地建立大量传出连接并耗尽本地端口时,可能会发生这种情况。 您可以在这里阅读“短暂的端口范围”。

或者,您可能只是耗尽了套接字。 确保在使用完毕后关闭它们。

我还强烈建议你看一下你的写线程,以及你如何引用与Socket相关的资源。 即,您是否正在为使用Socket的任何NetworkStream或其他对象调用Close / Dispose? 如果您仍然在努力解决问题,那么来自写入线程的代码示例将会很有帮助。

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