Sin la -qbandera, su instancia netcatesperará para siempre. No hay un mensaje de "fin de transmisión" con UDP, por lo que no hay forma de netcatsaber 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:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
Pero como ha determinado, usando UDP / IP esto nunca termina:
nc -u -l localhost 4300 # Window 1
nc -u localhost 4300 </etc/group # Window 2
Aquí es donde -qentra la bandera. Pero desafortunadamente no acepta un valor de 0. Tampoco aceptará valores no enteros. Aquí está la mejor alternativa que puedo ofrecer sin recurrir a ninguna timeoutotra utilidad externa:
nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
Incluso aquí, no es posible tener el netcattiempo de escucha con gracia. (La -wopción de tiempo de espera se ignora y -qes irrelevante). Algo como esto podría ser útil en una situación práctica, de modo que netcatse elimine después de 90 segundos:
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q.