-qझंडे के बिना आपका उदाहरण netcatहमेशा के लिए इंतजार करेगा। यूडीपी के साथ "स्ट्रीम का अंत" संदेश नहीं है, इसलिए यह netcatजानने का कोई तरीका नहीं है कि स्टडिन और नेटवर्क कनेक्शन दोनों समाप्त हो गए हैं।
उदाहरण के लिए, टीसीपी / आईपी के उपयोग से यह उम्मीद के मुताबिक काम करता है:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
लेकिन जैसा कि आपने निर्धारित किया है, यूडीपी / आईपी के उपयोग से यह कभी समाप्त नहीं होता है:
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अप्रासंगिक है।) कुछ इस तरह से व्यावहारिक स्थिति में उपयोग किया जा सकता है, ताकि netcat90 सेकंड के बाद मार दिया जाए :
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q।