民间,
我的环境是Ubuntu 12.04。
这是我正在侦听连接的TCP服务器应用程序的伪代码:
while(true) {
int hConn = accept(hMain, NULL, NULL);
string s = readClient(hConn);
if (s == "quit") {
close(hConn);
}
}
当我的服务器正在运行时,我通过端口nnnn远程登录到localhost:
$ telnet localhost nnnn
quit
Connection closed by foreign host.
$
当服务器收到“退出”时,它会关闭客户端连接。这会导致telnet客户端退出并显示相应的消息。
到目前为止一切顺利。
但是,当我运行netstat时,我仍然可以看到客户端连接仍然存在。
连接消失需要几秒钟。
即使我强行退出服务器应用程序,也会发生这种情况。
如果我再次运行我的服务器应用程序,则会收到端口“nnnn”仍在使用中的错误。
我必须等待几秒才能再次运行我的服务器应用程序。
我有什么遗失的东西吗?有没有办法解决这个问题?
请注意,我在退出服务器时确实关闭了套接字hMain,尽管上面的伪代码中没有显示。
提前感谢您的帮助。
的问候,
彼得
答案 0 :(得分:0)
您需要了解TIME_WAIT
状态,该状态提供已关闭的TCP连接因TCP安全性/完整性原因而暂停几分钟。
可以通过SO_REUSEADDR
选项解决重启服务器的问题。