Без -q
флага ваш экземпляр netcat
будет ждать вечно. В UDP нет сообщения «конец потока», поэтому нет возможности netcat
узнать, что и stdin, и сетевое соединение завершены.
Например, при использовании TCP / IP это работает как ожидалось:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
Но, как вы определили, использование UDP / IP никогда не заканчивается:
nc -u -l localhost 4300 # Window 1
nc -u localhost 4300 </etc/group # Window 2
Это где -q
флаг входит. Но, к сожалению, он не принимает значение 0
. Это также не будет принимать нецелые значения. Вот лучшая альтернатива, которую я могу предложить, не прибегая к timeout
какой-либо внешней утилите:
nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
Даже здесь невозможно netcat
изящно провести время прослушивания . (Параметр -w
тайм-аута игнорируется и не -q
имеет значения.) Нечто подобное может быть полезно в практической ситуации, так что его netcat
убивают через 90 секунд:
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q
.