-q
Bayrak olmadan örneğiniz netcat
sonsuza kadar bekleyecektir. UDP ile "akış sonu" mesajı yoktur, bu nedenle netcat
hem stdin hem de ağ bağlantısının bittiğini bilmenin bir yolu yoktur .
Örneğin, TCP / IP kullanarak bu beklendiği gibi çalışır:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
Ancak belirlediğiniz gibi, UDP / IP kullanarak bu asla bitmez:
nc -u -l localhost 4300 # Window 1
nc -u localhost 4300 </etc/group # Window 2
-q
Bayrak burada devreye giriyor. Maalesef değeri kabul etmiyor 0
. Tamsayı olmayan değerleri de kabul etmez. İşte size timeout
veya başka bir harici yardımcı programa başvurmadan sunabileceğim en iyi alternatif :
nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
Burada bile, dinleme netcat
zamanının zarif bir şekilde bitmesi mümkün değildir . (Zaman -w
aşımı seçeneği yok sayılır ve -q
önemsizdir.) Bunun gibi bir şey pratik bir durumda kullanılabilir, böylece netcat
90 saniye sonra öldürülür:
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q
.