我对套接字编程很陌生。我们的应用程序使用套接字与我们公司制造的设备进行通信。套接字有时需要很长时间才能关闭。
这是在关闭套接字时运行的代码:
if (client != null) {
try {
if (client.Connected) {
client.Disconnect(false);
client.Shutdown(SocketShutdown.Both);
}
client.Close();
} catch (SocketException) {
}
client = null;
}
我已经阅读了documentation for the Socket.Shutdown
method和the responses to this question,我很困惑。是否会转移或放弃任何待处理的数据从远程系统转移到该系统,反之亦然?如果放弃待处理传输的数据,可能会延迟套接字的关闭?
答案 0 :(得分:1)
关闭前请致电Shutdown
,以便确保实际收到所有排队的数据。
请勿致电Disconnect
。为什么这是必要的?没理由。在关闭之前尤其错误。想一想这是否有意义。
在Dispose
之后调用Close
或Shutdown
以释放所有操作系统资源。现在可以可靠地关闭连接。
不要吞下SocketException
。你为什么做这个?你永远不会发现你收到的数据没有收到。
套接字有问题,有时需要很长时间才能关闭。
你怎么知道的?有什么症状?