bind()
की INADDR_ANY
करता है नहीं "एक यादृच्छिक आईपी उत्पन्न"। यह सॉकेट को सभी उपलब्ध इंटरफेस से बांधता है ।
एक सर्वर के लिए, आप आम तौर पर सभी इंटरफेस से जुड़ना चाहते हैं - न कि केवल "लोकलहोस्ट"।
यदि आप अपने सॉकेट को केवल लोकलहोस्ट से बांधना चाहते हैं my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1");
, तो सिंटैक्स होगा , फिर कॉल करें bind(my_socket, (SOCKADDR *) &my_sockaddr, ...)
।
जैसा कि होता है, INADDR_ANY
एक स्थिरांक है जो "शून्य" के बराबर होता है:
http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html
# define INADDR_ANY ((unsigned long int) 0x00000000)
...
# define INADDR_NONE 0xffffffff
...
# define INPORT_ANY 0
...
यदि आप पहले से ही इससे परिचित नहीं हैं, तो मैं आपसे आग्रह करता हूं कि बीज़ गाइड टू सॉकेट्स प्रोग्रामिंग की जाँच करें:
http://beej.us/guide/bgnet/
चूंकि लोग अभी भी इसे पढ़ रहे हैं, एक अतिरिक्त नोट:
आदमी (7) आईपी :
जब कोई प्रक्रिया नए इनकमिंग पैकेट या कनेक्शन प्राप्त करना चाहती है, तो उसे बाइंड (2) का उपयोग करके एक स्थानीय इंटरफ़ेस पते पर एक सॉकेट बांधना चाहिए ।
इस मामले में, केवल एक आईपी सॉकेट किसी भी स्थानीय (पता, पोर्ट) जोड़ी के लिए बाध्य हो सकता है। जब INADDR_ANY को बाइंड कॉल में निर्दिष्ट किया जाता है, तो सॉकेट सभी स्थानीय इंटरफेस के लिए बाध्य होगा।
जब सुनो (2) को एक अनबाउंड सॉकेट पर कहा जाता है, तो सॉकेट स्वचालित रूप से एक बेतरतीब मुक्त पोर्ट से बंध जाता है, जिसमें INADDR_ANY सेट किया गया है।
जब कनेक्ट (2) को एक अनबाउंड सॉकेट पर कॉल किया जाता है, तो सॉकेट स्वचालित रूप से एक यादृच्छिक मुक्त पोर्ट या INADDR_ANY के लिए स्थानीय पते के साथ एक प्रयोग करने योग्य साझा पोर्ट से जुड़ा होता है ...
कई विशेष पते हैं: INADDR_LOOPBACK (127.0.0.1) हमेशा लूपबैक डिवाइस के माध्यम से स्थानीय होस्ट को संदर्भित करता है; INADDR_ANY (0.0.0.0) का अर्थ है बाध्यकारी के लिए कोई भी पता ...
इसके अलावा:
बाइंड () - एक नाम को एक सॉकेट से बांधें :
यदि sin_addr.s_addr) फ़ील्ड निरंतर INADDR_ANY पर सेट है, जैसा कि netinet / in.h में परिभाषित किया गया है, तो कॉल करने वाला अनुरोध कर रहा है कि सॉकेट होस्ट पर सभी नेटवर्क इंटरफेस के लिए बाध्य है। इसके बाद, सभी इंटरफेस (जो बाउंड नाम से मेल खाते हैं) से यूडीपी पैकेट और टीसीपी कनेक्शन को आवेदन में भेज दिया जाता है। यह तब महत्वपूर्ण हो जाता है जब एक सर्वर कई नेटवर्क को सेवा प्रदान करता है। पते को अनिर्दिष्ट छोड़कर, सर्वर नेटवर्क इंटरफ़ेस की परवाह किए बिना सभी UDP पैकेट और टीसीपी कनेक्शन अनुरोधों को स्वीकार कर सकता है, जिस पर अनुरोध आया था।
htonl(INADDR_ANY)
। डॉक्टर का कहना है कि यह फ़ंक्शन एक यादृच्छिक आईपी उत्पन्न करता है ... " यह सही नहीं है। कौन सा डॉक्स आपको ऐसा बताता है?