socat UDP IPv6 到 IPv4 网关导致大量进程

socat UDP IPv6 到 IPv4 网关导致大量进程

我有一个仅支持 IPv4 的 UDP 应用程序,监听端口 624。我使用 socat 创建了一个 IPv6/IPv4 前端,监听端口 625。现在我可以使用服务器的 IPv4 或 IPv6 地址来访问仅支持 IPv4 的应用程序。到目前为止,一切都很棒!

socat UDP6-LISTEN:625,fork,su=nobody UDP4:localhost:624 &

在仅发送一条 UDP 消息(以下示例中为 IPv4)后,我看到创建了两个新的长寿命进程,网关的每一侧各一个。

# lsof -i:624 -i:625 -n -P -i:625
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
myap     4296   root    4u  IPv4   7845     0t64  UDP *:624
socat   28597 nobody    3u  IPv6  67603     0t64  UDP 192.168.93.90:625->192.168.90.121:34091
socat   28597 nobody    4u  IPv4  67882     0t64  UDP 127.0.0.1:53648->127.0.0.1:624

你可以想象,对于一个繁忙的服务器,长寿命进程的数量会迅速增长。

我如何使用 socat 提供网关功能并让其清理这些长寿命的 UDP 进程?

答案1

我从 socat 手册页中找到了我需要的内容......

答案是针对基于 UDP 的通信设置超时。

-T<timeout>完全不活动超时:当 socat 已处于传输循环中并且几秒钟内没有发生任何事情<timeout> [timeval](没有数据到达、没有发生中断......)时,它就会终止。 对于无法传输 EOF 的 UDP 等协议很有用

因此命令行应该变成(5秒超时):

socat -T5 UDP6-LISTEN:625,fork,su=nobody UDP4:localhost:624 &

马特。

相关内容