标签: c# sockets
我有一项服务,负责从服务器读取和写入。 读写是在不同的线程中完成的。
读取器线程始终处于活动状态,而写入线程仅在发送消息时激活,并在消息写入服务器并收到响应后消亡。
该服务运行4天,之后每当服务尝试从端口读取时,我都会连续收到此错误:
System.Net.Sockets.SocketException:无法执行套接字上的操作,因为 系统缺少足够的缓冲区空间或因为队列已满()
System.Net.Sockets.SocketException:无法执行套接字上的操作,因为 系统缺少足够的缓冲区空间或因为队列已满(
答案 0 :(得分:6)
当您非常快速地建立大量传出连接并耗尽本地端口时,可能会发生这种情况。您可以阅读“短暂的端口范围”here。
或者,您可能只是耗尽了套接字。完成使用后,请确保close。
答案 1 :(得分:0)
我还强烈建议你查看你的写线程,以及你如何引用与Socket相关的资源。即,您是否正在为使用Socket的任何NetworkStream或其他对象调用Close / Dispose?如果您仍然在努力解决问题,那么来自写入线程的代码示例将会很有帮助。
您可能还希望通过任务管理器监视进程内存并处理使用情况。