nc (netcat) trava, esperando por mais dados, no modo UDP.

14

Estou tentando enviar uma pequena string para o statsd via nc dentro de um bloco de leitura:

while read line; do
    printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done

Infelizmente, quando no modo UDP, o nc parece querer esperar indefinidamente, mesmo que eu tenha especificado -q 0 , que a man page diz que fará o programa sair imediatamente após o EOF.

Eu tentei passar -w 1 , mas se os dados que estou envia vêm em mais de uma linha por segundo, os dados ficam em buffer, e perco minhas estatísticas em tempo real (sem mencionar o risco de estouro de buffer de algum tipo).

É possível fazer o que estou tentando fazer com o netcat, ou precisarei escrever algo em uma linguagem que tenha uma biblioteca statsd?

    
por bshacklett 12.04.2013 / 21:09

4 respostas

8

Acabei de corrigir o problema mudando para socat :

while read line; do
    printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
    
por 12.04.2013 / 22:33
6

Você pode especificar 0 como um valor de tempo limite para -w, por isso não esperará nada.

    
por 24.06.2015 / 12:19
2

Adicionando opção -v resolveu meu problema. A razão pela qual não tenho certeza.

    
por 18.05.2016 / 22:35
2

Saiba que este é um post antigo, mas pensei em contribuir de qualquer maneira. Eu tive o mesmo problema; resolveu usando a opção -c :

-c, --close                close connection on EOF from stdin

então algo como

while read line; do
    printf "folder.counter:value|1c" | nc -cu $host $port
done

Sim, não faz sentido "fechar" uma conexão udp - mas acabou funcionando.

    
por 28.02.2017 / 14:49