如何关闭阻塞的套接字

时间:2010-08-24 14:29:02

标签: .net multithreading sockets

Windows服务有一个正在接收数据的开放套接字(在单独的线程上)

响应服务OnShutdown我想通知工作线程关闭,但它目前在Receive被阻止。

目前我正在Receive超时检查是否有待处理的停止请求。有没有更好的方法,而不是等待超时通知工作线程停止接收并通过其关闭逻辑?

2 个答案:

答案 0 :(得分:2)

致电Socket.Close。它将导致Socket.Receive方法抛出异常立即解除阻塞。

异常是IO.IOException,它将SocketException作为内部异常。内部异常的本机错误代码是10004。

答案 1 :(得分:0)

在线程上调用Interrupt()应该使其脱离任何阻塞操作: http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt.aspx

请注意,这会导致ThreadInterruptedException(阻止时),您应该妥善处理。