2012-12-05 15 views
7

मैं नेटकैट के साथ कुछ बंदरगाहों को सुनकर ओएस एक्स पर जेनकींस में बंदरगाह आवंटन समस्याओं को डीबग करने की कोशिश कर रहा था, जिसके कारण कुछ अजीब परिणाम सामने आए।ओएस एक्स एक ही टीसीपी पोर्ट को दो बार सुनने की अनुमति क्यों देता है?


ओएस पर एक टर्मिनल एक्स 10.8.2 में:

$ uname -rs 
Darwin 12.2.1 

$ nc -l 54321 
फिर एक दूसरे टर्मिनल में

:

$ nc -l 54321

और एक तिहाई टर्मिनल में, lsof कि दोनों मामलों से पता चलता एक ही बंदरगाह से बंधे हैं:

$ lsof -i | grep 54321 
nc 70706 chris 3u IPv4 0x55618c024692f4d1  0t0 TCP *:54321 (LISTEN) 
nc 70769 chris 3u IPv4 0x55618c0232cb8661  0t0 TCP *:54321 (LISTEN) 

लिनक्स पर:

पहले टर्मिनल:

$ uname -rs 
Linux 3.2.0-34-generic 

$ nc -l 54321 

दूसरा टर्मिनल:

$ nc -l 54321 
nc: Address already in use 

क्यों ओएस एक्स भी रिपोर्ट नहीं करता पते में पहले से ही है कि उपयोग?

+1

मुझे 'lsof -i' आउटपुट सिंटैक्सिस नहीं पता है, लेकिन' 0x55618c024692f4d1' और '0x55618c0232cb8661' क्या हैं? यदि यह आईपी पते हैं, तो यह स्पष्ट रूप से है क्योंकि श्रोता एक विशिष्ट आईपी पते से बंधे थे, न कि "कोई भी" पता। – CodeCaster

+0

वे अर्थहीन स्मृति पते हैं। उनके पास एकमात्र उद्देश्य यह पहचानना है कि ये दो अलग-अलग सॉकेट हैं (उदाहरण के लिए, 'कांटा() 'या' dup() ') का परिणाम नहीं। – duskwuff

+0

'lsof -i' चलाना मुझे उस क्षेत्र के लिए 27 अद्वितीय मान देता है ("DEVICE"); मेरा मानना ​​है कि यह एक स्मृति पता है। अंतिम कॉलम से पता चलता है कि सॉकेट '*' के लिए बाध्य हैं। –

उत्तर

6

ओएस एक्स पर द्विआधारी SO_REUSEPORT सॉकेट विकल्प सेट कर रहा है, जो पूरी तरह से डुप्लिकेट बाइंडिंग (setsockopt on OS X) की अनुमति देता है। आप ओएस एक्स

पर डीट्रैस का उपयोग करके इसे सत्यापित कर सकते हैं लिनक्स पर नेटकैट बाइनरी ऐसा नहीं करता है, इसलिए आपको अपेक्षित बाध्य त्रुटि मिलती है। फिर, आप स्ट्रेस का उपयोग कर सत्यापित कर सकते हैं। मुझे विश्वास है कि SO_REUSEPORT को हटा दिया गया है, या नए लिनक्स कर्नेल पर भी उपलब्ध नहीं है।

+0

जानकारी के लिए धन्यवाद! यह भी बताता है कि क्यों सॉफ्टवेयर का एक और टुकड़ा चल रहा था, 'एनसी' * ने शिकायत की कि बंदरगाह पहले ही उपयोग में है। –

+0

जानकारी के लिए, SO_REUSEPORT सॉकेट विकल्प Linux 3.9 में जोड़ा गया था: https://lwn.net/Articles/542629/ –

संबंधित मुद्दे