2010-08-24 69 views
4

Windows服务具有一个接收数据的开放式插槽(一个单独的线程)如何关闭阻塞插座

为响应服务OnShutdown我想发出信号的工作线程关机,但它目前已被阻止在Receive

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

+1

最好的方法是使用异步套接字。反正他们的规模好得多。 – 2010-08-24 14:34:57

+0

从某种意义上说它是异步的。当然,我并没有使用BeginReceive - 但即使我是这样,我如何让它停止正在等待数据的接收。 – 2010-08-24 14:51:57

回答

2

致电Socket.Close。这将导致Socket.Receive方法立即释放异常。

异常是IO.IOException,它有一个SocketException作为内部异常。内部异常的本地错误代码为10004.