2011-11-24 10 views
19

मैं कई अनुप्रयोगों के लिए आईपीवी 6 समर्थन को लागू करने पर काम करता हूं, लेकिन मुझे आश्चर्य हुआ कि इन 2 फ़ील्ड के लिए क्या हैं। इसके बारे में बहुत कम प्रश्न हैं इसलिए मुझे यकीन नहीं है कि मुझे यह सही मिला है।IPv4 क्लाइंट/सर्वर ऐप्स में IPv6 के लिए समर्थन जोड़ना - sin6_flowinfo और sin6_scope_id फ़ील्ड?

  • बारे गुंजाइश आईडी (sin6_scope_id) - अच्छी तरह से, Q1, Q2, Q3 और Q4 मुझे गुंजाइश आईडी के बारे में विचार प्रदान किया और मुझे लगता है कि मैं समझ गया। इसलिए, स्कोप-आईडी कॉन्फ़िगर करने योग्य बनाने के लिए, मुझे एक और कॉन्फ़िगरेशन पैरामीटर जोड़ना होगा। (मैंने इसे यहां जोड़ने का फैसला किया है, अगर कोई इसमें रूचि रखता है)। संक्षेप में - विशिष्ट रूप से यह निर्धारित करने के लिए स्कोप आईडी आवश्यक है कि डिवाइस कौन सा है, जो यातायात को संभालना चाहिए - क्योंकि एक ही आईपी के साथ कई इंटरफ़ेस हो सकते हैं, लेकिन अलग-अलग (इंटरफ़ेस?) आईडी के साथ। अब तक सब ठीक है.
  • लेकिन कैसे के बारे में "प्रवाह जानकारी" (sin6_flowinfo)
    • यह किसलिए है? मुझे इसके बारे में कुछ भी दिलचस्प नहीं मिला। मैंने RFC पढ़ा लेकिन यह मेरी मदद नहीं करता था।
    • sin6_flowinfo (जैसे - कई मान, जैसे झंडे, जिसका मतलब कुछ है) के लिए कुछ संभावित मान हैं, या यह sin6_scope_id की तरह है - डिवाइस के आधार पर कोई मूल्य हो सकता है, मैं कनेक्ट करने का प्रयास कर रहा हूं?
    • मैं इसके बारे में चिंता करना चाहिए, या मैं सिर्फ 0 (के रूप में Beej's Guide to Network Programming में छोड़ मेरे। और हाँ, मैंने कोशिश की है कि, यह काम करता है, लेकिन मुझे यकीन है कि अगर यह केवल इस मामले में काम करता है नहीं कर रहा हूँ (अगर यह कुछ नेटवर्क विन्यास पर निर्भर करता है), या यह हमेशा काम करेगा, अगर यह 0 पर सेट है?
    • या, शायद, मुझे इसे कॉन्फ़िगर करने योग्य बनाना चाहिए, मेरा मतलब है - एक और कॉन्फ़िगरेशन विकल्प जोड़ें और उपयोगकर्ता को इसके मान को परिभाषित करने दें?
    • google -ing "sin6_flowinfo" मुझे संरचना परिभाषाएं और मैन पेज देता है, इस क्षेत्र के बारे में कुछ भी उपयोगी नहीं है। कोई भी दिलचस्प स्रोत? (समझने योग्य एक .. आरएफसी नहीं: 0)

संपादित: RFC: IPv6 Flow Label Specification, IETF draft: Flow Label as Transport-Layer Nonce, Practical guide for solaris और wikipedia: ठीक है, @glglgl के जवाब के बाद और संकेत के बाद, sin6_flowinfo अप्रचलित हो सकता है, मैं कुछ रोचक स्रोत नहीं मिला।
फ़ील्ड अप्रचलित नहीं है (या मुझे ऐसा स्रोत नहीं मिला, जो इसकी पुष्टि करता है), लेकिन यह 0 जैसा दिखता है क्योंकि मान पर्याप्त है।

+1

मैंने डाउनवॉट्स के बारे में टिप्पणी हटा दी - यह एक बिल्कुल अच्छा सवाल है, इसके बारे में चिंता न करें। – caf

उत्तर

6

getaddrinfo() का उपयोग करने का सबसे अच्छा तरीका है।

छद्म कोड:

struct addrinfo *restrict hints = { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM }; 
struct addrinfo * res, r; 
if (0 == getaddrinfo("foo.bar.baz", "http", &hints, &res)) { 
    for (r=res; r; r=r->ai_next) { 
     sock = socket(r->ai_family, r->ai_socktype, r->ai_protocol); 
     connect(sock, r->ai_addr, r->ai_addrlen); 
     if error: continue 
     break 
    } 
} 
freeaddrinfo(res); 

यह आपको से चिंता के बारे में sin6_scope_id ले जाएगा; जो आमतौर पर 0 है, सिवाय इसके कि आपके पास fe80::1234:56ff:fe78:9abc%eth2 जैसे लिंक-स्थानीय पते हैं। यह eth2 सही दायरे आईडी में परिवर्तित हो गया है।

sin6_flowinfo अप्रचलित (AFAIK) है और इस प्रकार आपके परिणामस्वरूप struct addrinfo's ai_addr में 0 पर सेट है।

+0

हाँ, मुझे यह विकल्प पता है और मैंने इसे जोड़ा है, लेकिन मैं मैन्युअल रूप से प्रत्येक विकल्प को सेट करने की संभावना जोड़ना चाहता हूं। और मैं 'sin6_flowinfo' पर अटक गया। मैं बाद में 'sin6_flowinfo' के बारे में लिंक पढ़ूंगा, लेकिन अगर यह अप्रचलित है और मैं इसे' 0' छोड़ सकता हूं, तो यह सही होगा। एक बार फिर धन्यवाद :) –

+0

ठीक है, मुझे एक प्रासंगिक स्रोत नहीं मिला, जो कहता है, यह अप्रचलित है, लेकिन मैं '0' मान से सहमत हूं। मुझे कुछ दिलचस्प लिंक मिले, जो मैं अपने प्रश्न को पोस्ट करने के बजाय, अपना खुद का पोस्ट करने के बजाय पोस्ट कर दूंगा। सहायता के लिए धन्यवाद। –

+1

@ किरिलकिरोव आप सही हैं: यह अप्रचलित के विपरीत है: उन्हें अभी तक पता नहीं है कि इसके साथ क्या करना है ;-) – glglgl

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