Estoy tratando de enviar un mensaje netcat
. Después de enviar el mensaje, netcat
debe terminar.
He intentado lo siguiente:
cat tsmmessage.bin | nc -u localhost 4300
nc -u localhost 4300 < message.bin
La -q
opción dice:
-q segundos
después de EOF en stdin, espere el número de segundos especificado y luego salga. Si los segundos son negativos, espera para siempre.
Pero
nc -q0 -u localhost 4300 < message.bin
Tampoco funciona.
¿Qué me estoy perdiendo?
-q
.invalid wait-time 0
Sin la
-q
bandera, su instancianetcat
esperará para siempre. No hay un mensaje de "fin de transmisión" con UDP, por lo que no hay forma denetcat
saber que tanto la conexión estándar como la conexión de red han finalizado.Por ejemplo, usando TCP / IP esto funciona como se esperaba:
Pero como ha determinado, usando UDP / IP esto nunca termina:
Aquí es donde
-q
entra la bandera. Pero desafortunadamente no acepta un valor de0
. Tampoco aceptará valores no enteros. Aquí está la mejor alternativa que puedo ofrecer sin recurrir a ningunatimeout
otra utilidad externa:Incluso aquí, no es posible tener el
netcat
tiempo de escucha con gracia. (La-w
opción de tiempo de espera se ignora y-q
es irrelevante). Algo como esto podría ser útil en una situación práctica, de modo quenetcat
se elimine después de 90 segundos:fuente
-q 0
funciona para mi.udp
tcp
fuente
Tropecé con esto cuando busqué en Google casi el mismo problema. Resultó que el problema era que netcat fue asesinado por bash justo después de que se absorbieron todos los datos, sin tener ninguna oportunidad de recibir la respuesta.
Mi solución a esto fue agregar algún retraso después de canalizar los datos, así:
Con un archivo esto puede verse así:
fuente
netcat
Todavía no se cierra cuandosleep
termina. Esperaría que la primera línea de comando regrese al indicador después de 1 segundo, pero no es así.-q 1
? es decir(echo INFO; sleep 1) | nc -q 1 redis.service.consul 6379
?-q
todo funciona, incluso el ejemplo en mi pregunta original. Me mudé a una versión más nueva de Ubuntu desde entonces, tal vez eso cause la diferencia.