Socket.Shutdown和线程

时间:2014-07-01 18:31:05

标签: c# multithreading sockets

我对套接字编程很陌生。我们的应用程序使用套接字与我们公司制造的设备进行通信。套接字有时需要很长时间才能关闭。

这是在关闭套接字时运行的代码:

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 methodthe responses to this question,我很困惑。是否会转移或放弃任何待处理的数据从远程系统转移到该系统,反之亦然?如果放弃待处理传输的数据,可能会延迟套接字的关闭?

1 个答案:

答案 0 :(得分:1)

关闭前请致电Shutdown,以便确保实际收到所有排队的数据。

请勿致电Disconnect。为什么这是必要的?没理由。在关闭之前尤其错误。想一想这是否有意义。

Dispose之后调用CloseShutdown以释放所有操作系统资源。现在可以可靠地关闭连接。

不要吞下SocketException。你为什么做这个?你永远不会发现你收到的数据没有收到。

  

套接字有问题,有时需要很长时间才能关闭。

你怎么知道的?有什么症状?