当前位置: 首页 > 知识库问答 >
问题:

如何移除CLOSE_WAIT套接字连接

邓焱
2023-03-14

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

一旦程序意外终止,从那以后套接字连接就显示为CLOSE_WAIT状态。如果我试图运行一个程序,它就挂起,我必须强制关闭它,这会积累更多的CLOSE_WAIT套接字连接。

有办法冲洗这些连接吗?

共有3个答案

齐博厚
2023-03-14

您可以使用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 )' --kill
袁炳
2023-03-14

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

CLOSE_WAIT意味着连接的本地端已经收到来自另一端的FIN,但操作系统正在等待本地端的程序实际关闭其连接。

问题是在本地计算机上运行的程序没有关闭套接字。这不是TCP调优问题。当程序保持连接打开时,连接可以(非常正确地)永远停留在CLOSE_WAIT中。

一旦本地程序关闭套接字,操作系统就可以将FIN发送到远程端,当您等待FIN的确认字符时,远程端会将您转换到LAST_ACK。一旦收到,连接就完成并从连接表中删除(如果您的端处于CLOSE_WAIT您最终不会处于TIME_WAIT状态)。

郗奇玮
2023-03-14

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

< code>SO_REUSEADDR用于服务器和< code>TIME_WAIT套接字,因此不适用于此处。

 类似资料:
  • 问题内容: 我写了一个小程序,可以在特定端口上与服务器交互。该程序可以正常运行,但是: 一旦程序意外终止,并且此套接字连接一直处于状态显示。如果我尝试运行程序,它将挂起,并且必须强制将其关闭,这会累积 更多的 套接字连接。 有没有一种方法可以清除这些连接? 问题答案: 表示您的程序仍在运行,并且尚未关闭套接字(内核正在等待它关闭)。添加到以获取该pid,然后更加有力地将其杀死(如果需要,可以将其删

  • 编写一个iocp控制台服务器并不容易,套接字池和线程池都工作得很好,但是过了一段时间,服务器就不能再连接了,虽然没有什么问题发生,为什么呢?我用procexp_16.05.1446001339.exe检查进程属性,发现有很多close_wait状态,过了一段时间close_wait状态消失了,但是服务器还是不能连接,这是为什么呢?又该如何修复呢?

  • 有很多close_wait连接,当客户端客户端将消息发送到服务器并输出TCP FSM卡在close_wait状态时 这是客户端代码, 这是侦听即将到来的连接的服务器代码 输出TCP FSM

  • 问题内容: 如何创建SSL套接字连接? 我真的需要创建密钥库吗?该密钥库应该与我所有的客户端应用程序共享吗? 我用以下代码创建了一个服务器: 我用以下代码在android上创建了一个客户端: 但是当我尝试连接时,会引发以下错误: 问题答案: 您需要一个证书来建立ssl连接,您可以在密钥库中加载证书,也可以加载证书本身。我将显示一些有关keystore选项的示例。 您的代码需要一些参数才能运行: 您

  • 我试图通过Windows服务从套接字接收数据,但当我建立连接时,它会立即生效。我希望不断地接收它(当端口关闭时,它将断开连接)。我怎样才能做到这一点? 这是我现在的输出; “GET/HTTP/1.1 主持人:127.0.0.1:1994 连接:保持活力 缓存控制:最大年龄=0 升级-不安全-请求: 1 用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)Apple