Socks5代理“Dante”使许多subprocess陷于FIN_WAIT2 / CLOSE_WAIT状态

我作为SOCKS代理服务器运行dante v1.2.1。 代理工作正常,但在一天结束时,即使没有活动连接,仍有大约40-50个或更多subprocess运行。

lsof显示subprocess都在CLOSE_WAIT和FIN_WAIT2状态有套接字。 这些subprocess保持这种状态,除非我手动killall /重新启动守护进程。

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

这是Dante,我的系统的configuration问题,还是丹特源代码的问题?

CLOSE_WAIT表示另一侧closures连接。 本地程序closures套接字描述符后,套接字将被closures。 CLOSE_WAIT没有超时,所以进程可以无限期地在这个状态下被一个套接字卡住。 当你杀死进程和它的孩子时,他们closures套接字并closures。 运行lsof并查看孩子是否打开了sockets。 如果他们这样做,那么它看起来像在他们的代码中的错误。

至于FIN_WAIT2,就是本地端等待FIN,ACK来确认closures连接。 但是,在这个状态下有一个系统范围的超时时间(参见/proc/sys/net/ipv4/tcp_fin_timeout ),默认是60秒,所以在这个阶段没有任何东西应该停留一分钟以上。 但是,如果似乎可以编写一个程序,半closures的连接看起来像是内核的一个活动的连接,所以超时将不会启动。同样,您似乎已经find了一个错误。