如何删除CLOSE_WAIT套接字连接?

时间:2014-04-28 01:00:57

标签: c linux sockets tcp

我在C中编写了一个简单的程序,用于在X86运行窗口和运行嵌入式Linux的ARM之间建立连接(仅包含Busybox和libc)。突然这个小程序无法连接windows和linux,然后我运行“netsta -a”发现3个套接字的状态为CLOSE_WAIT且PID为NULL。所以我尝试修改“net.ipv4.tcp_keepalive_×”,但因为busybox只有我无法使用的基本功能/etc/rc.d/init.d/network restart使修改生效。

所以我想知道:

  1. 如何使更改从Busybox生效?
  2. 我如何使用套接字可以避免CLOSE_WAIT问题?

2 个答案:

答案 0 :(得分:1)

  

如何删除不属于任何任务的CLOSE_WAIT连接?

我们已经确定该进程仍在运行, 属于某个任务。我们还确定netstat输出是一个完整的红鲱鱼。

您需要做的就是关闭套接字。您可能忘记在连接失败后关闭它。它只是一个常见的或花园文件/套接字描述符泄漏。

答案 1 :(得分:0)

您可能需要查看:https://github.com/rghose/kill-close-wait-connections

这个脚本的作用是发送连接等待的ACK。

这对我有用。