Без -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.