2009-02-17 36 views
4

我有一个服务,负责从服务器读取和写入。 阅读和写作是在不同的线程完成的。为什么我在C#服务中得到这个SocketException?

阅读器线程始终处于活动状态,而只有写入线程才会激活以发送消息并且一旦消息写入服务器并收到响应就会死亡。

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

System.Net.Sockets.SocketException:一个套接字上的操作可能因为 系统缺乏足够的缓冲空间,不执行或因为队列已满

+0

感谢您的编辑,我正在寻找编辑,但无法找到任何选项。 – user65266 2009-02-17 18:05:12

回答

6

当你非常迅速地建立了大量传出连接和运行的本地端口会发生这种情况。您可以阅读关于“临时端口范围”here

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

+0

我有一个我每次都读取的套接字,并且存在keepalive机制(发送keepalive消息给服务器和处理响应),如果连接丢失套接字已关闭并且新的套接字已打开 – user65266 2009-02-17 18:11:50

0

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

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