关闭客户端和服务器后的孤立TCP连接

时间:2013-07-01 06:33:58

标签: java tcp client-server

我在java中实现了一个客户端服务器应用程序,它工作正常。现在,如果我在shell中执行netstat -a以查看活动连接,我会看到以下表单中有很多孤立连接

TCP 127.0.0.1:54725 Sin-Host:0 LISTENING

例如,如果我在端口58185上创建服务器,如下所示

TCP 127.0.0.1:58185 Sin-Host:0 LISTENING

当客户端连接到它时,我得到两个连接,如下所示

TCP 127.0.0.1:58185 Sin-Host:0 LISTENING
TCP 127.0.0.1:58185 Sin-Host:58187 ESTABLISHED
TCP 127.0.0.1:58187 Sin-Host:58185 ESTABLISHED

现在当我关闭我的客户端和服务器时,第一个连接仍然存在(即LISTENING状态不是TIMED_WAIT

我认为当我关闭客户端和服务器时,没有理由保留第一个连接。这是一个错误吗?它并没有真正影响我的程序,但我只想知道,以便我知道它的影响。

**EDIT : How long do these orphans last**

我重启了我的系统,所有的孤儿都没了。我重复了测试,发现即使应用程序关闭后孤儿仍然存在,但在系统重启后就会消失。

也许我猜这是一些阻止它首先进入的系统设置。

1 个答案:

答案 0 :(得分:0)

只要你有像

这样的行
serverSocket.accept();

在您的代码中,与LISTENING的连接将保留。

accept()会导致端口的LISTENING状态。

两个ESTABLSHED行都用于活动连接。