我试图确保Windows服务程序(运行在.NET之上)正确地释放其网络连接。由pid零拥有的TCP连接
在本地运行服务时,我知道它会在端口57300上创建大量的HTTP连接到本地主机。我使用netstat
来监视它们是否正确释放。
我很惊讶地发现许多到这个端口的连接都属于“系统空闲进程”(PID = 0)。
在这里我们可以看到,只有三个这些连接是由服务程序(PID = 5012)所拥有。所有其他人都拥有PID 0.
我的主要问题是:这是为什么发生?和我需要关心吗?
但我也想知道:
这是否意味着该服务方案并正确地释放连接,或不?
如果需要,可以重复使用这种连接吗?
在.NET ServicePointManager中做这样的连接“预留插槽”吗?
我的理解是,TCP连接关闭后,它会进入TIME_WAIT状态一段固定的时间。这是为了确保与可能仍在网络中排队的连接有关的任何数据包不会干扰新的连接。由于即使原始进程已经退出也必须发生这种情况,所以我猜测Windows会自动将所有权转移给系统进程。所以,我相信你最后四个问题的答案分别是否,是,不是。 –
谢谢!你为什么不把它作为答案发布?另外,你知道这个固定时间段可能有多长时间吗? –
[进程0正在使用我的端口]的可能重复(http://stackoverflow.com/questions/17543298/process-0-is-using-my-port) – CodeCaster