我已经编写了一个与特定端口上的服务器交互的小程序。该程序运行良好,但:
一旦程序意外地终止,并且从此套接字连接以CLOSE_WAIT状态显示。如果我试图运行一个程序,它会挂起,我不得不强制关闭它,这会积累更多的CLOSE_WAIT套接字连接。
有办法冲洗这些连接吗?
发布于 2013-04-09 17:30:04
CLOSE_WAIT意味着您的程序仍然在运行,并且没有关闭套接字(内核正在等待它这样做)。将-p添加到netstat以获取pid,然后更有力地杀死它(如果需要的话使用SIGKILL )。这应该可以消除您的CLOSE_WAIT套接字。您还可以使用ps查找pid。
SO_REUSEADDR用于服务器和TIME_WAIT套接字,因此这里不适用。
发布于 2013-07-25 11:11:20
正如克里斯特·克拉克所描述的。
CLOSE_WAIT意味着连接的本地端已经从另一端接收到一个FIN,但是OS正在等待本地端的程序实际关闭其连接。 问题是在本地机器上运行的程序没有关闭套接字。这不是TCP调优问题。当程序保持连接打开时,连接可以(并且非常正确)永远停留在CLOSE_WAIT中。 一旦本地程序关闭了套接字,操作系统就可以将FIN发送到远程终端,这将使您在等待FIN的ACK时切换到LAST_ACK。一旦接收到该连接,连接就完成并从connection表中删除(如果您的端处于CLOSE_WAIT状态,则不会以TIME_WAIT状态结束)。
发布于 2020-04-10 11:22:23
您可以使用ss命令强行关闭套接字;ss命令是一种工具,用于转储套接字统计信息,并以类似的方式(尽管更简单和更快)显示信息到netstat。
若要在CLOSE_WAIT状态下关闭任何套接字,请运行此套接字(以root用户身份)
$ ss --tcp state CLOSE-WAIT --kill你也可以过滤你的行动。
$ ss --tcp state CLOSE-WAIT '( dport = 22 or dst 1.1.1.1 )' --killhttps://stackoverflow.com/questions/15912370
复制相似问题