बस यह सुनिश्चित करने के लिए कि हम एक ही पृष्ठ पर हैं (आपका प्रश्न इस तरह अस्पष्ट है), पोर्ट 0 पर टीसीपी को बांधने के लिए पूछना एक अप्रयुक्त पोर्ट नंबर को गतिशील रूप से उत्पन्न करने के अनुरोध को इंगित करता है। दूसरे शब्दों में, उस अनुरोध के बाद आप जिस पोर्ट नंबर पर वास्तव में सुन रहे हैं, वह शून्य नहीं है। इस में के बारे में एक टिप्पणी है [linux kernel source]/net/ipv4/inet_connection_sock.c
पर inet_csk_get_port()
:
/* Obtain a reference to a local port for the given sock,
* if snum is zero it means select any available local port.
*/
जो एक मानक यूनिक्स सम्मेलन है। ऐसी प्रणालियां हो सकती हैं जो वास्तव में पोर्ट 0 का उपयोग करने की अनुमति देंगी, लेकिन यह एक बुरा अभ्यास माना जाएगा। हालाँकि यह व्यवहार आधिकारिक रूप से POSIX, IANA या TCP प्रोटोकॉल द्वारा निर्दिष्ट नहीं है। 1 आपको यह दिलचस्प लग सकता है ।
इसलिए आप समझदारी से एक TCP कनेक्शन को शून्य पोर्ट नहीं कर सकते हैं। संभवतः इससे nc
अवगत है और आपको सूचित करता है कि आप एक गैर-सनसनीखेज अनुरोध कर रहे हैं। यदि आप मूल कोड में यह कोशिश करते हैं:
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = 0;
inet_aton("127.0.0.1", &addr.sin_addr);
if (connect(fd, (const struct sockaddr*)&addr, sizeof(addr)) == -1) {
fprintf(stderr,"%s", strerror(errno));
}
आपको वही त्रुटि मिलती है जिसे आप किसी अन्य अनुपलब्ध पोर्ट से कनेक्ट करने का प्रयास करेंगे: ECONNREFUSED
"कनेक्शन ने इनकार कर दिया"। तो जवाब में:
व्यवस्था में यह कहां से संभाला जाता है? OS कर्नेल के TCP स्टैक में?
शायद ऩही; इसके लिए विशेष हैंडलिंग की आवश्यकता नहीं है। यानी, यदि आप एक सिस्टम पा सकते हैं जो पोर्ट 0 पर बाध्यकारी और सुनने की अनुमति देता है, तो आप संभवतः इसे कनेक्ट कर सकते हैं।
1. लेकिन IANA इसे "आरक्षित" ( यहां देखें ) के रूप में संदर्भित करता है । मतलब, इस पोर्ट का उपयोग ऑनलाइन नहीं किया जाना चाहिए । यह गतिशील असाइनमेंट सम्मेलन के संबंध में ठीक है (क्योंकि यह वास्तव में उपयोग नहीं किया जाएगा)। एक उद्देश्य के रूप में विशेष रूप से निर्धारित करना, शायद IANA के दायरे से परे होगा; संक्षेप में ऑपरेटिंग सिस्टम ऐसा करने के लिए स्वतंत्र हैं जो वे इसके साथ चाहते हैं, जिसमें कुछ भी नहीं है।