开发者

How to close a blocked socket

A windows service has an open socket that is receiving data (on a separate thread)

In response to the service OnShutdown I would like to signal worker thread to shutdown, but it's currently blocked on the Receive.

At the 开发者_开发知识库moment I'm timing out on the Receive to check if there is a stop request pending. Is there a better approach, rather than waiting on the timeout to notify the worker thread to stop receiving and go through its shutdown logic?


Call Socket.Close. It will cause the Socket.Receive method to throw an exception unblocking it immediately.

The exception is an IO.IOException, that has an SocketException as an inner exception. The native error code of the inner exception is 10004.


Calling Interrupt() on the thread should make it break out of any blocking operation: http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt.aspx

Note that this will cause a ThreadInterruptedException (when blocking), which you should handle appropriately.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜