如何关闭(杀死,释放?)处于FIN_WAIT_2状态的套接字
本文关键字:WAIT FIN 状态 套接字 处于 何关闭 杀死 释放 | 更新日期: 2023-09-27 18:34:40
>我有一个客户端应用程序,它使用非托管 dll 与服务器通信。
所有与网络相关的操作都包含在非托管 dll 中。对服务器执行多项操作后,客户端的 TCP 端口即将用完。如果我们使用 'netstat -an' 检查 netwotk 的状态,我们会得到以下结果:
...
TCP 192.168.11.55:56048 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56049 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56050 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56051 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56052 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56053 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56054 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56055 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56056 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56057 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56058 192.168.10.27:5000 FIN_WAIT_2
TCP 192.168.11.55:56059 192.168.10.28:5000 FIN_WAIT_2
TCP 192.168.11.55:56060 192.168.10.27:5000 FIN_WAIT_2
...
只有在客户端关闭后,才会释放端口。
如果我在调试模式下运行 VS 项目,它永远不会耗尽端口。但是,在发布模式下运行时,它正在发生。
而且我既无法访问服务器,也无法访问客户端源。
如何释放或终止那些处于FIN_WAIT_2状态的端口?
当套接字处于FIN_WAIT_2状态时,本地套接字已关闭,正在等待远程套接字发送其关闭请求。如果此关闭请求从未到达,套接字将保持FIN_WAIT_2状态一段时间。
这背后的原因是,如果来自远程方的关闭请求将被延迟并在另一个应用程序重用套接字后到达,则该新连接将立即关闭。
如果需要,可以更改超时,但最终非托管 dll 尚未完全实现 TCP 关闭序列。有关更多信息,请参阅
http://answers.microsoft.com/en-us/windows/forum/windows_7-networking/how-to-close-finwait2-connections-except-reboot/ba2fed9f-8b61-4b71-ab5b-d39dc9a387e3
当您
关闭/关闭客户端套接字时,服务器端套接字将读取0 bytes
。
此时,您应该关闭/关闭服务器套接字。您的连接将显示为TIME_WAIT
,PID0
并最终消失。
我认为这是最好的。