getaddrinfo और getnameinfo आपके मित्र हैं .. जितना संभव हो सके मैं सुझाव देता हूं कि वे मौजूदा एप्लिकेशन में आईपीवी 4 और आईपीवी 6 समर्थन प्रदान करने के लिए आपकी खोज में अपने सबसे अच्छे दोस्त बनें।
यदि आईपीवी 6 समर्थन जोड़कर सही किया जाता है तो आप सिस्टम को उस बिंदु पर सारणीबद्ध करते हैं जहां एक अज्ञात भविष्य आईपी प्रोटोकॉल कोड संशोधन के बिना चलाया जा सकता है।
आम तौर पर जब कनेक्ट करने से आपको एक सॉकेट संरचना, बंदरगाह, पता परिवार, आईपी पता, भरें रूपांतरित पता/बंदरगाहों बाइट क्रम नेटवर्क, आदि
getaddrinfo
साथ
आप एक आईपी पता या होस्टनाम और बंदरगाह या भेज बंदरगाह का नाम, और यह संरचनाओं और सीधे socket()
और connect()
में पारित होने के लिए तैयार सब कुछ के साथ एक लिंक्ड सूची देता है।
getaddrinfo
दोनों IP प्रोटोकॉल के साथ काम करने के लिए महत्वपूर्ण है यह जानता है मेजबान IPv6 या IPv4 कनेक्टिविटी है और यदि सहकर्मी जो प्रोटोकॉल (रों) का पता लगा लेता बनाम A
रिकॉर्ड DNS AAAA
को देखकर रूप में अच्छी तरह से करता है और गतिशील रूप से यह जानता है के रूप में विशिष्ट कनेक्शन अनुरोध सेवा के लिए उपलब्ध हैं।
मैं अत्यधिक inet_pton()
, inet_addr()
या आईपी संस्करण विशिष्ट हैं जो परिचित उपकरणों के उपयोग के खिलाफ अत्यधिक सलाह देता हूं। विंडोज प्लेटफॉर्म पर विशेष रूप से inet_pton()
एमएस विंडोज (एक्सपी, 2003 एट अल।) के पुराने संस्करणों के साथ संगत नहीं है जब तक आप अपना खुद का रोल नहीं करते। आईपीवी 4 और आईपीवी 6 के लिए अलग-अलग संस्करणों के खिलाफ भी सलाह दें ... यह तकनीकी समाधान के रूप में अनावश्यक है क्योंकि निकट भविष्य में दोनों प्रोटोकॉल को एक साथ उपयोग करने की आवश्यकता होगी और लोगों को उपयोग करने के लिए समय से पहले पता नहीं हो सकता है। सॉकेट इंटरफेस सार हैं और आईपीवी 6 सॉकेट बनाने या श्रोताओं के लिए आईपीवी 6 ड्यूलस्टैक सॉकेट विकल्प सेट करने का प्रयास करके दोहरीस्टैक या आईपीवी 6 समर्थन का पता लगाना आसान है। ऐसा कोई कारण नहीं है जिसके परिणामस्वरूप एप्लिकेशन उस सिस्टम पर नहीं चलेगा जो आईपीवी 6 के बारे में समर्थन या जानकारी नहीं देता है।
आउटगोइंग कनेक्शन PF_UNSPEC
getaddrinfo
में उपयोग करें ताकि आउटगोइंग कनेक्शन बनाते समय पता परिवार आपके लिए चुना जा सके। यह, आईएमएचओ, ड्यूलस्टैक दृष्टिकोण से बेहतर है क्योंकि यह प्लेटफॉर्म को अनुमति देता है जो काम करने के लिए ड्यूलस्टैक का समर्थन नहीं करता है।
आने वाले कनेक्शनों के लिए आप या तो आईपीवी 4/आईपीवी 6 सॉकेट को अलग से बांध सकते हैं यदि डिज़ाइन दिया गया हो या दोहरी स्टैक का उपयोग करें यदि आप अलग श्रोताओं को नहीं कर सकते हैं। डुएलस्टैक getnameinfo
का उपयोग करते समय आईपीवी 4 पते के लिए आईपीवी 6 पता देता है जो आईएमएचओ काफी बेकार हो जाता है। एक छोटी उपयोगिता दिनचर्या स्ट्रिंग को सामान्य आईपीवी 4 पते में परिवर्तित कर सकती है।
मेरे अनुभव से सही होने पर आपने विशिष्ट आईपी संस्करणों पर निर्भरताओं को हटा दिया है और शुरू करने से कम सॉकेट प्रबंधन कोड समाप्त कर दिया है।
यह भी ध्यान देने योग्य है कि ये सभी कॉल आमतौर पर विंडोज़, मैक ओएस एक्स और लिनक्स के बीच पोर्टेबल हैं, यहां केवल थोड़ी सी अंतर है। –