首页 文章

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

提问于
浏览
1

伙计们,

我的环境是Ubuntu 12.04 .

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

while(true) {
    int hConn = accept(hMain, NULL, NULL);

    string s = readClient(hConn);
    if (s == "quit") {
        close(hConn);
    }
 }

当我的服务器运行时,我通过端口nnnn telnet到localhost:

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

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

到现在为止还挺好 .

但是,当我运行netstat时,我仍然可以看到客户端连接仍然存在 .

连接消失需要几秒钟 .

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

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

我必须等待几秒才能再次运行我的服务器应用程序 .

有什么东西我错过了吗?有没有办法解决这个问题?

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

预先感谢您的帮助 .

问候,
彼得

1 回答

  • 0

    您需要了解 TIME_WAIT 状态,该状态提供已关闭的TCP连接因TCP安全性/完整性原因而挂起几分钟 .

    重启服务器的问题可以通过 SO_REUSEADDR 选项来解决 .

相关问题