.Net停止监听套接字

时间:2009-07-08 13:10:37

标签: .net sockets

我有一个围绕类似于Asynchronous Server Socket Example

的代码编写的Windows服务

一切都很好。客户端/服务器通信完美运行。没问题。当我尝试关闭Windows服务时,我无法在不收到以下错误的情况下停止服务器套接字侦听器:

  

不允许发送或接收数据的请求,因为套接字未连接且(使用sendto调用在数据报套接字上发送时)未提供地址。

我已尝试以下各种组合来停止聆听。但他们都抛出了错误。

listener.Shutdown(SocketShutdown.Both);
listener.Disconnect(true);
listener.Close();

即使它出错,套接字也会最终释放并关闭。但是,我可能需要一分钟才能重新启动Windows服务。我需要能够比这更快地循环Windows服务。如果你能提供帮助,请告诉我。感谢...

2 个答案:

答案 0 :(得分:2)

尝试设置LingerState属性

socket.LingerState = new LingerOption(false, 0);
socket.Shutdown(SocketShutdown.Both);
socket.Disconnect(false);
socket.Close();

希望这有帮助。

答案 1 :(得分:1)

listener是你用于.Bind(),. Listen()和.Accept()的套接字,即它不是通过.Connect()连接的套接字,还是通过.Accept()接受的连接?
然后不要调用listener.Discconnect()。

“无用”细节:
System.Net.Socket.Disconnect使用(不安全)函数指针来调用(本机)winsock扩展函数DisconnectEx

Parameters
hSocket [in]
A handle to a connected, connection-oriented socket.
您的侦听器套接字未处于连接状态。