我有一个.net 4.0 WCF应用程序,它在net.tcp端口667上进行侦听.(Windows 7机器)
某些时候,应用程序会以非正常方式退出(例如,用户会终止该进程).
现在发生一件奇怪的事情:港口仍然开放.当用户重新启动应用程序时,它无法侦听该端口,因为它已在使用中.
奇怪的是,即使拥有进程被杀死,操作系统也不会关闭端口,即使在几个小时后也没有.
以下是一些观察结果:
<non-existent>
,PID属于旧的(被杀死的)进程,状态是LISTENING
.本地地址是我的机器,该端口上有两个IPV4
和IPV6
监听器.netstat -a -b -n -o
所涉及的可执行文件时显示为System
和本地地址0.0.0.0
.其他信息与TcpView相同.我发现关闭该端口的唯一方法是系统重启...
有没有办法配置 WCF net.tcp 服务主机侦听器以避免进程不正常存在后出现延迟?
不,至少不应该使用,但是有一种方法可以告诉它在重新启动时重用套接字地址,这使得没有必要。
有没有办法以编程方式关闭该端口?如果有,我的应用程序可以先关闭该端口,然后再尝试监听它。
不可以。只有打开端口的应用程序才能关闭它。
是否有实用程序可以关闭此类“守护程序”端口?(因为 TcpView 无法做到这一点)
不,请参阅上文。
这是操作系统错误吗?操作系统不应该跟踪此类“守护进程”侦听器并在进程存在后关闭它们吗?
当进程退出时,应该释放进程的所有资源,包括 TCP 端口。TCP“ESTABLISHED”端口有一个例外,出于 TCP 安全原因,该端口会挂起几分钟。
听起来好像有一个子进程继承了仍然处于活动状态的套接字。
归档时间: |
|
查看次数: |
2297 次 |
最近记录: |