У меня есть приложение UDP только для IPv4, прослушивающее порт 624. Я создал интерфейс IPv6/IPv4 с socat, прослушивая порт 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?