मैं नेटकैट के साथ कुछ बंदरगाहों को सुनकर ओएस एक्स पर जेनकींस में बंदरगाह आवंटन समस्याओं को डीबग करने की कोशिश कर रहा था, जिसके कारण कुछ अजीब परिणाम सामने आए।ओएस एक्स एक ही टीसीपी पोर्ट को दो बार सुनने की अनुमति क्यों देता है?
ओएस पर एक टर्मिनल एक्स 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
क्यों ओएस एक्स भी रिपोर्ट नहीं करता पते में पहले से ही है कि उपयोग?
मुझे 'lsof -i' आउटपुट सिंटैक्सिस नहीं पता है, लेकिन' 0x55618c024692f4d1' और '0x55618c0232cb8661' क्या हैं? यदि यह आईपी पते हैं, तो यह स्पष्ट रूप से है क्योंकि श्रोता एक विशिष्ट आईपी पते से बंधे थे, न कि "कोई भी" पता। – CodeCaster
वे अर्थहीन स्मृति पते हैं। उनके पास एकमात्र उद्देश्य यह पहचानना है कि ये दो अलग-अलग सॉकेट हैं (उदाहरण के लिए, 'कांटा() 'या' dup() ') का परिणाम नहीं। – duskwuff
'lsof -i' चलाना मुझे उस क्षेत्र के लिए 27 अद्वितीय मान देता है ("DEVICE"); मेरा मानना है कि यह एक स्मृति पता है। अंतिम कॉलम से पता चलता है कि सॉकेट '*' के लिए बाध्य हैं। –