pid零所拥有的TCP连接

Mår*_*röm 15 .net windows netstat tcp

我正在努力确保Windows服务程序(在.NET之上运行)正确释放其网络连接.

在本地运行服务时,我知道它将在端口57300上创建大量到localhost的HTTP连接.我用它netstat来监视它们是否正确释放.

我很惊讶地发现这个端口的许多连接都归"系统空闲进程"(PID = 0)所有.

netstat输出

在这里我们可以看到服务程序只拥有其中三个连接(PID = 5012).所有其他人都归PID 0所有.

我的主要问题是:为什么会这样?我需要照顾?

但我也想知道:

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

  • 如果需要,这些连接会被重用吗?

  • 在.NET ServicePointManager中进行这样的连接"保留插槽" 吗?

Har*_*ton 20

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

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

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

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

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

  • 如果系统用完TCB,TIME_WAIT连接将提前关闭.在默认配置中,这将在您用完端口之前发生,因此实际上,是的,如果需要,将重新使用连接.

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

在Windows XP上,TIME_WAIT延迟默认值为两分钟.我找不到更多最近的信息,但似乎从那以后它没有被改变.