Estou tentando enviar uma pequena string para 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
, o que a página de manual diz que fará o programa sair imediatamente após o EOF.
Tentei passar -w 1
, mas se os dados que estou enviando chegarem a mais de uma linha por segundo, os dados serão armazenados em buffer e eu perco minhas estatísticas em tempo real (para não mencionar o risco de um buffer overflow de algum tipo).
É possível fazer o que estou tentando fazer com o netcat, ou vou precisar escrever algo em linguagem que tenha uma biblioteca statsd?
Respostas:
Acabei corrigindo o problema alternando para
socat
:fonte
Você pode especificar 0 como um valor de tempo limite para -w, para que não espere nada.
fonte
invalid wait-time 0
a opção de adição -v resolveu meu problema. A razão pela qual não tenho certeza.
fonte
Eu tive o mesmo problema; resolveu usando a
-c
opção:então algo como
Sim, realmente não faz sentido "fechar" uma conexão udp - mas isso acabou funcionando.
fonte
-c
resolveu meu problema com #netcat (The GNU Netcat) 0.7.1
Para nós, estávamos enviando uma carga nc de uma máquina para outra através de um script python. No python, quando codificamos explicitamente a carga útil em 'UTF-8', apenas funcionou.
fonte