2012-09-20 5 views
12

मैं बस थोड़ी देर पहले लिखा कुछ कोड साफ कर रहा हूं और देखा है कि एक udp सॉकेट के लिए, कनेक्शन को बंद होने के रूप में माना जा रहा है।लिनक्स के तहत, कभी भी यूडीपी पर 0 वापस कर सकते हैं?

मुझे पूरा यकीन है कि यह समकक्ष टीसीपी संस्करण से एक ही रिकव लूप को पोर्ट करने का नतीजा था। लेकिन यह मुझे आश्चर्यचकित करता है। Udp के लिए 0 वापस कर सकते हैं? टीसीपी पर यह संकेत देता है कि दूसरे छोर ने कनेक्शन बंद कर दिया है। udp में कनेक्शन की अवधारणा नहीं है, तो क्या यह 0 वापस आ सकता है? और यदि यह कर सकता है, तो इसका क्या अर्थ है?

नोट: लिनक्स में मैन पेज शून्य के रिटर्न कोड के लिए udp और tcp को अलग नहीं करता है, यही कारण है कि हमने कोड में चेक रखा था।

+0

क्या यूडीपी सॉकेट जुड़े हुए हैं या नहीं? –

+0

आप यूडीपी सॉकेट पर "कनेक्ट" को कॉल कर सकते हैं, लेकिन जो कुछ करता है वह यूडीपी सॉकेट में रिमोट आईपी एड्रेस/पोर्ट असाइन करता है। इससे आपको बिना भेजने के "बस" और "आरईवी" को कॉल करने की अनुमति मिलती है। मेरा मानना ​​है कि यह एक फिल्टर के रूप में भी कार्य करता है और केवल आपको उस पते से केवल udp डेटाग्राम प्राप्त करने की अनुमति देता है। तो एक अर्थ में वे जुड़े हुए हैं, लेकिन टीसीपी के साथ नहीं। – Matt

उत्तर

12

udp में कनेक्शन की अवधारणा नहीं है तो क्या यह 0 वापस आ सकता है? और यदि यह कर सकता है, तो इसका अर्थ क्या है

इसका मतलब है कि 0-लंबाई डेटाग्राम प्राप्त हुआ था। महान UNP से:

लंबाई 0 का डेटाग्राम लिखना स्वीकार्य है। यूडीपी के मामले में, यह आईपी डेटा युक्त एक आईपी डेटाग्राम में परिणाम देता है (आईपीवी 4 के लिए सामान्य रूप से 20 बाइट और आईपीवी 6 के लिए 40 बाइट्स), 8-बाइट यूडीपी हेडर, और कोई डेटा नहीं। यह भी मतलब है कि recvfrom से 0 से वापसी मान एक आंकड़ारेख प्रोटोकॉल के लिए स्वीकार्य है: यह मतलब नहीं है कि सहकर्मी कनेक्शन बंद कर दिया गया है, के रूप में TCP सॉकेट पर पढ़ा से 0 से वापसी मान करता है। चूंकि यूडीपी कनेक्शन रहित है, यूडीपी कनेक्शन बंद करने जैसी कोई चीज नहीं है।

+0

याद नहीं किया जा सकता है एक डाटाग्राम वितरित करने की गारंटी है या टीसीपी के विपरीत नहीं है जहां आप कुछ डेटा प्राप्त कर सकते हैं। –

+0

@ एड्रियन कॉर्निश मुझे लगता है कि सभी आधुनिक ढेर इसे वितरित करने का प्रयास करते हैं भले ही कोई पेलोड न हो। – cnicutar

+0

उस प्रश्न को बुरी तरह से छेड़छाड़ की - उदाहरण के लिए मैं एक टीसीपी कनेक्शन पर 100 बाइट भेज सकता हूं और दूसरा अंत केवल 50 प्राप्त कर सकता है और उसे फिर से पढ़ने की आवश्यकता है - इसलिए मुझे लगता है कि असली सवाल यह है कि आवेदन परत –

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