-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
अप्रासंगिक है।) कुछ इस तरह से व्यावहारिक स्थिति में उपयोग किया जा सकता है, ताकि netcat
90 सेकंड के बाद मार दिया जाए :
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q
।