-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
。