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


16

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?


apesar de não resolver o seu, acrescentando q 0 resolvido o meu problema
Colin

Isso acontece no modo TCP agora, e foi isso que me trouxe aqui.
precisa saber é

Respostas:


9

Acabei corrigindo o problema alternando para socat:

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

Como não houve outra entrada, e isso resolveu o meu problema, estou marcando-a como a resposta.
precisa saber é o seguinte

Você poderia ter adicionado um tempo limite de 1 segundo ao netcat (adicionar os argumentos -w 1 provavelmente funcionaria).
parkamark 28/02

7

Você pode especificar 0 como um valor de tempo limite para -w, para que não espere nada.


Essa deve ser a resposta aceita.
Petrus K.

3
Zero timeout é inaceitável, o erro:invalid wait-time 0
AstraSerg 26/09

2

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


2

Eu tive o mesmo problema; resolveu usando a -copção:

-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, realmente não faz sentido "fechar" uma conexão udp - mas isso acabou funcionando.


Adicionando -cresolveu meu problema com #netcat (The GNU Netcat) 0.7.1
Noah Sussman

0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.