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