首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除CLOSE_WAIT套接字连接

如何删除CLOSE_WAIT套接字连接
EN

Stack Overflow用户
提问于 2013-04-09 13:31:29
回答 7查看 389.2K关注 0票数 109

我已经编写了一个与特定端口上的服务器交互的小程序。该程序运行良好,但:

一旦程序意外地终止,并且从此套接字连接以CLOSE_WAIT状态显示。如果我试图运行一个程序,它会挂起,我不得不强制关闭它,这会积累更多的CLOSE_WAIT套接字连接。

有办法冲洗这些连接吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-04-09 17:30:04

CLOSE_WAIT意味着您的程序仍然在运行,并且没有关闭套接字(内核正在等待它这样做)。将-p添加到netstat以获取pid,然后更有力地杀死它(如果需要的话使用SIGKILL )。这应该可以消除您的CLOSE_WAIT套接字。您还可以使用ps查找pid。

SO_REUSEADDR用于服务器和TIME_WAIT套接字,因此这里不适用。

票数 97
EN

Stack Overflow用户

发布于 2013-07-25 11:11:20

正如克里斯特·克拉克所描述的。

CLOSE_WAIT意味着连接的本地端已经从另一端接收到一个FIN,但是OS正在等待本地端的程序实际关闭其连接。 问题是在本地机器上运行的程序没有关闭套接字。这不是TCP调优问题。当程序保持连接打开时,连接可以(并且非常正确)永远停留在CLOSE_WAIT中。 一旦本地程序关闭了套接字,操作系统就可以将FIN发送到远程终端,这将使您在等待FIN的ACK时切换到LAST_ACK。一旦接收到该连接,连接就完成并从connection表中删除(如果您的端处于CLOSE_WAIT状态,则不会以TIME_WAIT状态结束)。

票数 44
EN

Stack Overflow用户

发布于 2020-04-10 11:22:23

您可以使用ss命令强行关闭套接字;ss命令是一种工具,用于转储套接字统计信息,并以类似的方式(尽管更简单和更快)显示信息到netstat。

若要在CLOSE_WAIT状态下关闭任何套接字,请运行此套接字(以root用户身份)

代码语言:javascript
复制
$ ss --tcp state CLOSE-WAIT --kill

你也可以过滤你的行动。

代码语言:javascript
复制
$ ss --tcp state CLOSE-WAIT '( dport = 22 or dst 1.1.1.1 )' --kill
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15912370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档