nc (netcat) se cuelga, esperando más datos, en modo UDP.


16

Estoy tratando de enviar una pequeña cadena a statsd a través de nc dentro de un bloque de lectura:

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

Desafortunadamente, cuando está en modo UDP, nc parece querer esperar indefinidamente, a pesar de que he especificado -q 0, lo que dice la página de manual hará que el programa salga inmediatamente después de EOF.

He intentado pasar -w 1, pero si los datos que envío llegan a más de una línea por segundo, los datos se acumulan y pierdo mis estadísticas en tiempo real (sin mencionar el riesgo de un desbordamiento del búfer de algún tipo).

¿Es posible hacer lo que estoy tratando de hacer con netcat, o voy a necesitar escribir algo en un lenguaje que tenga una biblioteca de estadísticas?


aunque no resolvió el tuyo, agregar -q 0 resolvió mi problema
Colin

Esto sucede en modo TCP ahora, que es lo que me trajo aquí.
baitisj

Respuestas:


9

Terminé solucionando el problema cambiando a socat:

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

Como no ha habido otra entrada, y esto resolvió mi problema, lo estoy marcando como la respuesta.
bshacklett

Podría haber agregado un tiempo de espera de 1 segundo a netcat (agregar los argumentos -w 1 probablemente habría funcionado).
parkamark

7

Puede especificar 0 como un valor de tiempo de espera para -w, por lo que no esperará en absoluto.


Esta debería ser la respuesta aceptada.
Petrus K.

3
El tiempo de espera cero es inaceptable, el error:invalid wait-time 0
AstraSerg

2

Agregar la opción -v resolvió mi problema. La razón por la que no estoy seguro.


2

Tuve el mismo problema; lo resolvió usando la -copción:

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

entonces algo como

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

Sí, realmente no tiene sentido "cerrar" una conexión udp, pero eso terminó funcionando.


Agregar -cresolvió mi problema connetcat (The GNU Netcat) 0.7.1
Noah Sussman

0

Para nosotros, fue que estábamos enviando una carga útil nc de una máquina a otra a través de un script de python. En Python, cuando codificamos explícitamente la carga útil en 'UTF-8', simplemente funcionó.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.