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?
Respuestas:
Terminé solucionando el problema cambiando a
socat
:fuente
Puede especificar 0 como un valor de tiempo de espera para -w, por lo que no esperará en absoluto.
fuente
invalid wait-time 0
Agregar la opción -v resolvió mi problema. La razón por la que no estoy seguro.
fuente
Tuve el mismo problema; lo resolvió usando la
-c
opción:entonces algo como
Sí, realmente no tiene sentido "cerrar" una conexión udp, pero eso terminó funcionando.
fuente
-c
resolvió mi problema connetcat (The GNU Netcat) 0.7.1
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ó.
fuente