2015-06-29 7 views
9

लघु और सरल प्रश्न: मैं boost::asio पर नया हूं और मैं सोच रहा था कि tcp::acceptor दोनों को आईपीवी 4 और आईपीवी 6 कनेक्शन दोनों को सुनना संभव है या नहीं। बूस्ट के होमपेज पर ट्यूटोरियल इस तरह कुछ दिखाते हैं:बूस्ट में आईपीवी 4 और आईपीवी 6 को एक साथ स्वीकार करें :: एएसआई

_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456)); 

जहां एंडपॉइंट हमेशा एक विशिष्ट प्रोटोकॉल के साथ निर्दिष्ट होता है। क्या एक ही पोर्ट पर एक ही पोर्ट पर आईपीवी 4 और आईपीवी 6 सुनना संभव नहीं है?

उत्तर

12

यदि आप आईपीवी 6 स्वीकार्य बनाते हैं, तो IPV6_V6ONLY सॉकेट विकल्प साफ़ होने पर यह आईपीवी 4 और आईपीवी 6 कनेक्शन दोनों स्वीकार करेगा। IPv4-mapped प्रारूप में आईपीवी 4 पते आईपीवी 6 पते के रूप में प्रस्तुत किए जाएंगे।

समस्याएं मुख्य रूप से उत्पन्न होती हैं कि IPV6_V6ONLY उपलब्ध है या डिफ़ॉल्ट मान क्या है (चालू या बंद)। तो मुझे लगता है कि आप इसे जो चाहते हैं उसे स्पष्ट रूप से सेट करना बेहतर है।

इसके अलावा विंडोज एक्सपी विकल्प का समर्थन नहीं करता है।

तो यदि आप सिस्टम में संगत होना चाहते हैं, तो दो सॉकेट बनाने के लिए अनुशंसा की जाती है, एक v4 के लिए और एक v6 सेटिंग IPV6_V6ONLY के लिए।

+0

वही है जो मैं ढूंढ रहा था। मुझे वास्तव में सिस्टम में कुछ संगतता की आवश्यकता है, सबसे महत्वपूर्ण विंडोज 7 या उच्चतर और लिनक्स, जबकि मैंने देखा है कि आईपीवी 6_वी 6ONLY कर्नेल 2.6 के आसपास से समर्थित है। XP/Server2003 कोई समस्या नहीं होनी चाहिए, लेकिन रनटाइम पर सभी उपलब्ध सॉकेट विकल्पों की जांच करना अच्छा होगा - दुख की बात है कि मैं ऐसा करने के लिए एक तरीका नहीं आया, यह सब प्रीप्रोसेसर परिभाषित करता है जहां तक ​​मैं कह सकता हूं (या मैं विकल्प सेट करने और बाध्यकारी त्रुटि की जांच करने की कोशिश करता हूं)। वैसे भी, यह मेरे प्रश्न का उत्तर देता है। – PuerNoctis

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