我试图确保Windows服务程序(在.NET之上运行)正确地释放其networking连接。
在本地运行服务时,我知道它会在端口57300上创build大量的HTTP连接到本地主机。我使用netstat来监视它们是否正确释放。
我很惊讶地发现到这个端口的许多连接都属于“系统空闲进程”(PID = 0)。
C# – 蒙面文本框的(如何摆脱其中的下划线)
等待外部过程完成
.NET跟踪日志查看器
使用C#编程检测Windowslogin尝试
.Net中的asynchronous文件IO
在这里我们可以看到,只有三个连接属于服务程序(PID = 5012)。 其他所有都由PID 0所有。
我的主要问题是: 为什么会发生这种情况? 我需要关心吗?
但是我也想知道:
这是否意味着服务程序正确地释放了连接?
如果需要,这种连接是否会被重用?
在.NET ServicePointManager中做这样的连接“预留一个插槽”?
检测HWND可见性更改
你如何保护自己免受内存消耗失控打破个人电脑?
Windows服务 – 安装2份
在C#中我的程序注销部分错误,我可以得到一些帮助吗?
TCP连接关闭后,会进入TIME_WAIT状态一段固定的时间。 这是为了确保与网络中可能仍然排队的连接相关的任何数据包都不会干扰新的连接。
由于即使原始进程已经退出,这也必须发生,我猜测Windows会自动将所有权转移给系统进程。
所以,我相信你最后四个问题的答案是:
不,你可能不需要担心这个。
是的,服务程序正确地释放了连接。
如果系统用完TCB ,TIME_WAIT连接将提前关闭。 在缺省配置中,这会在用完端口之前发生,所以实际上,如果需要,连接将被重用。
我不熟悉服务点管理器,但没有理由在TIME_WAIT状态下跟踪连接,所以可能不会。
在Windows XP上, TIME_WAIT延迟的默认值是两分钟 。 我找不到更新的信息,但似乎从那时起它一直没有变化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。