为什么我的C#服务会出现SocketException异常?

4
我有一个服务,负责从服务器读取和写入数据。读取和写入是在不同的线程中进行的。
读取线程一直处于活动状态,而写入线程仅在发送消息时激活,并在将消息写入服务器并接收到响应后结束。
该服务运行了4天后,每当服务尝试从端口读取数据时,都会持续出现以下错误:
System.Net.Sockets.SocketException: 由于系统缓冲区空间不足或队列已满,无法执行套接字操作。

谢谢您的编辑,我一直在寻找编辑选项却找不到。 - user65266
2个回答

6
当您快速建立大量的外连并用尽本地端口时,可能会发生这种情况。您可以在此处了解“临时端口范围”。或者,您可能只是用尽了套接字。确保在使用完毕后关闭它们。

我有一个套接字,每次读取数据都在上面进行。还实现了保持活动机制(发送保持活动消息到服务器并处理响应)。如果连接丢失,则关闭套接字并打开新的套接字。 - user65266
我意识到我只关闭了套接字的shutdown,而没有调用close方法。 希望这样能解决问题。 - user65266

0
我还强烈建议您检查一下写线程,以及您如何引用与Socket相关的资源。例如,您是否为使用Socket的任何NetworkStream或其他对象调用了Close/Dispose?如果您仍然在解决问题,那么来自写线程的代码示例将会很有帮助。
您可能还想通过任务管理器监视进程内存和句柄使用情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接