2009-12-23 14 views
15

IPPROTO_UDP कब आवश्यक है?IPPROTO_UDP कब आवश्यक है?

क्या ऐसा कोई मामला है जहां यूडीपी SOCK_DGRAM के लिए डिफ़ॉल्ट प्रोटोकॉल नहीं है? (वास्तविक मामलों, काल्पनिक नहीं "यह हो सकता है", कृपया ")

यानी, स्थितियों में, जहां निम्नांकित दो पंक्तियों नहीं समान व्यवहार का उत्पादन होता है क्या कर रहे हैं

if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) 
if ((s=socket(AF_INET, SOCK_DGRAM, 0))==-1) 

उत्तर

12

इन घोषणाओं को देखते हुए:

tcp_socket = socket(AF_INET, SOCK_STREAM, 0); 
udp_socket = socket(AF_INET, SOCK_DGRAM, 0); 
raw_socket = socket(AF_INET, SOCK_RAW, protocol); 

लिनक्स में ip(7) मैनुअल पृष्ठ का कहना है:

प्रोटोकॉल के लिए केवल वैध मान 0 और टीसीपी सॉकेट के लिए IPPROTO_TCP हैं, और 0 और IPPROTO_UDP यूडीपी सॉकेट के लिए हैं। SOCK_RAW के लिए आप आरएफसी 1700 असाइन किए गए नंबरों में परिभाषित एक वैध आईएएनए आईपी प्रोटोकॉल निर्दिष्ट कर सकते हैं।

आपके प्रश्नों की उन दो पंक्तियां हमेशा एक ही परिणाम उत्पन्न करती हैं।

+0

मुझे लगता है कि 'IPPROTO_UDP' शून्य का उपयोग करना एक ही परिणाम नहीं है क्योंकि आपको सॉकेट मिलता है जिसके लिए आपको सभी शीर्षकों को भरने की आवश्यकता होती है। – WilliamKF

14

कुछ ऑपरेटिंग सिस्टम (उदाहरण के लिए 2.6.20 के बाद लिनक्स कर्नेल) SOCK_DGRAM के लिए दूसरे प्रोटोकॉल का समर्थन करता है, जिसे यूडीपी-लाइट कहा जाता है। यदि आपके सिस्टम द्वारा समर्थित है, तो यह सॉकेट() कॉल के लिए तीसरे तर्क के रूप में IPPROTO_UDPLITE प्रदान करके सक्षम किया जाएगा।

यह सामान्य यूडीपी से अलग होता है जिससे चेकसमिंग को डेटाग्राम के केवल एक हिस्से पर लागू किया जा सकता है। (आम तौर पर, यूडीपी चेकसमिंग एक सब कुछ या कुछ भी प्रयास नहीं है।) इस तरह, प्रोटोकॉल खंडित ट्रांसमिशन के कारण चेकसम विफलताओं के लिए अधिक प्रतिरोधी हो सकता है, इस स्थिति में कि चेकसमयुक्त क्षेत्र के बाहर कुछ टुकड़े पारगमन में खो गए हों। जब तक चेकसमड हिस्से को कवर करने वाले टुकड़े सफलतापूर्वक प्राप्त हुए, तब तक जितना संभव हो उतना डेटाग्राम एप्लिकेशन को वितरित किया जाएगा।

मौजूदा कोड के साथ पिछड़ा संगतता के लिए, मुझे संदेह है (लेकिन मैं गारंटी नहीं दे सकता) कि कॉल सॉकेट (AF_INET, SOCK_DGRAM, 0) सामान्य यूडीपी में डिफ़ॉल्ट रूप से जारी रहेगा, यहां तक ​​कि उन प्रणालियों में भी जो यूडीपी-लाइट का समर्थन करते हैं।

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