gpt4 book ai didi

c# - 如何关闭(杀死,释放?)处于 FIN_WAIT_2 状态的套接字?

转载 作者:太空狗 更新时间:2023-10-29 17:49:44 27 4
gpt4 key购买 nike

我有一个客户端应用程序,它使用非托管 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
...

端口只有在客户端关闭后才会释放。

如果我在 Debug模式下运行 VS 项目,它永远不会用完端口。但是,在 Release模式下运行时,它正在发生。

而且我无法访问服务器和客户端源代码。

如何释放或杀死那些处于 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

关于c# - 如何关闭(杀死,释放?)处于 FIN_WAIT_2 状态的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675900/

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