我有一个围绕类似于Asynchronous Server Socket Example
的代码编写的Windows服务一切都很好。客户端/服务器通信完美运行。没问题。当我尝试关闭Windows服务时,我无法在不收到以下错误的情况下停止服务器套接字侦听器:
不允许发送或接收数据的请求,因为套接字未连接且(使用sendto调用在数据报套接字上发送时)未提供地址。
我已尝试以下各种组合来停止聆听。但他们都抛出了错误。
listener.Shutdown(SocketShutdown.Both);
listener.Disconnect(true);
listener.Close();
即使它出错,套接字也会最终释放并关闭。但是,我可能需要一分钟才能重新启动Windows服务。我需要能够比这更快地循环Windows服务。如果你能提供帮助,请告诉我。感谢...
答案 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.