由pid零拥有的TCP连接

我试图确保Windows服务程序(在.NET之上运行)正确地释放其networking连接。

在本地运行服务时,我知道它会在端口57300上创build大量的HTTP连接到本地主机。我使用netstat来监视它们是否正确释放。

我很惊讶地发现到这个端口的许多连接都属于“系统空闲进程”(PID = 0)。

netstat输出

在这里我们可以看到,只有三个连接属于服务程序(PID = 5012)。 其他所有都由PID 0所有。

我的主要问题是: 为什么会发生这种情况? 我需要关心吗?

但是我也想知道:

  • 这是否意味着服务程序正确地释放了连接?

  • 如果需要,这种连接是否会被重用?

  • 在.NET ServicePointManager中做这样的连接“预留一个插槽”?

Solutions Collecting From Web of "由pid零拥有的TCP连接"

TCP连接关闭后,会进入TIME_WAIT状态一段固定的时间。 这是为了确保与网络中可能仍然排队的连接相关的任何数据包都不会干扰新的连接。

由于即使原始进程已经退出,这也必须发生,我猜测Windows会自动将所有权转移给系统进程。

所以,我相信你最后四个问题的答案是:

  • 不,你可能不需要担心这个。

  • 是的,服务程序正确地释放了连接。

  • 如果系统用完TCB ,TIME_WAIT连接将提前关闭。 在缺省配置中,这会在用完端口之前发生,所以实际上,如果需要,连接将被重用。

  • 我不熟悉服务点管理器,但没有理由在TIME_WAIT状态下跟踪连接,所以可能不会。

在Windows XP上, TIME_WAIT延迟的默认值是两分钟 。 我找不到更新的信息,但似乎从那时起它一直没有变化。