套接字连接即使在关闭后也会保持活动状态一段时间



Folks,

我的环境是Ubuntu 12.04。

以下是我的TCP服务器应用程序的伪代码,该应用程序正在侦听连接:

while(true) {
    int hConn = accept(hMain, NULL, NULL);
    string s = readClient(hConn);
    if (s == "quit") {
        close(hConn);
    }
 }

当我的服务器运行时,我在端口nnnn:远程登录到本地主机

$ telnet localhost nnnn
quit
Connection closed by foreign host.
$

当服务器收到"退出"时,它会关闭客户端连接。这会导致telnet客户端退出并显示相应的消息。

到目前为止还不错。

然而,当我运行netstat时,我仍然可以看到客户端连接仍然有效。

连接消失需要几秒钟的时间。

即使我强制退出服务器应用程序,也会发生这种情况。

如果我再次运行服务器应用程序,我会收到一个错误,即端口"nnnn"仍在使用中。

我必须等待几秒钟,然后才能再次运行我的服务器应用程序。

有什么东西我遗漏了吗?有办法解决这种行为吗?

请注意,在退出服务器时,我确实关闭了套接字hMain,尽管上面的伪代码中没有显示这一点。

提前感谢您的帮助。

问候,
Peter

您需要注意TIME_WAIT状态,该状态规定,由于TCP安全性/完整性原因,已关闭的TCP连接将挂起几分钟。

重新启动服务器的问题可以通过SO_REUSEADDR选项解决。

相关内容

最新更新