Socks5 代理“Dante”导致许多子进程停留在 FIN_WAIT2 / CLOSE_WAIT 状态

Socks5 代理“Dante”导致许多子进程停留在 FIN_WAIT2 / CLOSE_WAIT 状态

我正在运行 dante v1.2.1 作为 SOCKS 代理服务器。代理运行正常,但一天下来,即使没有活动连接,也会有大约 40-50 个或更多的 sockd 子进程在运行。

lsof 显示子进程的所有套接字都处于 CLOSE_WAIT 和 FIN_WAIT2 状态。除非我手动 killall/重新启动守护进程,否则这些子进程将保持此状态。

我在 2.6.24-23-xen 内核上运行 Gentoo Linux。我最近从 dante v1.1.19-r4 升级,它给我带来了完全相同的问题。

这是 Dante 或我的系统的配置问题,还是 dante 源的编码问题?

答案1

CLOSE_WAIT 表示另一方关闭了连接。本地程序关闭套接字描述符后,套接字将被关闭。CLOSE_WAIT 没有超时,因此进程可以无限期地将套接字卡在此状态。当您终止进程及其子进程时,它们会关闭套接字,然后它们就会被关闭。运行lsof并查看子进程是否打开了套接字。如果是,那么这看起来像是它们的代码中存在错误。

至于 FIN_WAIT2,是指本地端等待来自另一端的 FIN、ACK 以确认关闭连接。但是,此状态存在系统范围的超时(请参阅/proc/sys/net/ipv4/tcp_fin_timeout),默认情况下为 60 秒,因此任何事物在此阶段停留的时间都不应超过一分钟。但似乎可以编写一个程序,使半关闭的连接在内核看来就像是活动连接,因此不会发生超时。再次,似乎您发现了一个错误。

相关内容