gpt4 book ai didi

.net - pid 零拥有的 TCP 连接

转载 作者:可可西里 更新时间:2023-11-01 02:29:56 29 4
gpt4 key购买 nike

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

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

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

netstat output

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

我的主要问题是:为什么会这样?我需要关心吗?

但我也想知道:

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

  • 如果需要,是否会重用此类连接?

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

最佳答案

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

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

因此,我认为您最后四个问题的答案是:

  • 不,您可能不需要为此担心。

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

  • TIME_WAIT 连接将提前关闭 if the system runs out of TCBs .在默认配置中,这会在端口用完之前发生,因此实际上,是的,如果需要,连接将被重用。

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

在 Windows XP 上,default value for the TIME_WAIT delay was two minutes .我找不到更多最新信息,但它似乎从那时起就没有更改过。

关于.net - pid 零拥有的 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22802847/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com