为什么我在C#服务中收到此SocketException?

时间:2009-02-17 17:31:08

标签: c# sockets

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

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

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

  

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

2 个答案:

答案 0 :(得分:6)

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

或者,您可能只是耗尽了套接字。完成使用后,请确保close

答案 1 :(得分:0)

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

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