socat como um proxy UDP multi-cliente no macOS?

0

Estou tentando usar socat como um proxy UDP (v4- > v6) para um cliente (jogo) que rotineiramente inicia novas "conexões" UDP (TL; DR - o mundo é executado em vários servidores ouvindo em UDP diferente portas, o cliente permanece conectado a um servidor em particular, e precisará se conectar a outro, enquanto o jogador viaja entre as camadas do mundo). Pelo que entendi o manual, a opção "fork" deve cuidar disso, mantendo o socket de escuta no processo pai e bifurcando filhos ligados a um endereço "remoto" específico + porta:

$ socat UDP4-LISTEN:11001,bind=127.0.0.1,fork,reuseport,reuseaddr UDP6-SENDTO:remotehost:11001
(repeated for port 11000)

Até agora, tudo bem:

$ lsof -P -i 4UDP -a -p $(pgrep -d, socat)
COMMAND  PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
socat   2990 myxal     5u  IPv4 0x4e6e342add34664f      0t0  UDP localhost:11001
socat   2991 myxal     5u  IPv4 0x4e6e342add345f2f      0t0  UDP localhost:11000

Mas quando eu realmente faço isso e executo o cliente, o pai que deve reabrir o soquete de escuta falha com "Endereço já em uso":

socat[2990] E bind(5, {LEN=16 AF=2 127.0.0.1:11001}, 16): Address already in use

Claro, lsof confirma que não há nada escutando nesse soquete:

$ lsof -P -i 4UDP:11001
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
socat   3105 myxal    5u  IPv4 0x4e6e342add34664f      0t0  UDP localhost:11001->localhost:57324

Eu posso até executar nc -u -l 11001 neste momento sem problemas. O que estou perdendo aqui?

EDIT : Estou começando a achar que o comando acima está tecnicamente correto , e estou vendo um bug no socat. ATM, estou trabalhando em torno do problema simplesmente lançando socat em um loop - os filhos que seguram o soquete conectado não são afetados, afinal de contas ...

while true; do sleep 1; socat [...] ;
    
por myxal 31.03.2018 / 14:31

0 respostas