Acabei de corrigir o problema mudando para socat
:
while read line; do
printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
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?
Você pode especificar 0 como um valor de tempo limite para -w, por isso não esperará nada.
Adicionando opção -v resolveu meu problema. A razão pela qual não tenho certeza.
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.