मेरे पास एक ऐसा एप्लिकेशन है जो एक प्रेषक से रिसीवर को एक लिंक पर बिंदु बिंदु भेजता है जो सरल (एक तरफ ट्रांसमिशन) या डुप्लेक्स मोड (दो तरफ) में संचालित हो सकता है। सरल मोड में, एप्लिकेशन यूडीपी का उपयोग कर डेटा भेजता है, और डुप्लेक्स में यह टीसीपी का उपयोग करता है। चूंकि टीसीपी सॉकेट पर एक लिखना ब्लॉक हो सकता है, इसलिए हम गैर ब्लॉकिंग आईओ (ioctl FIONBIO - O_NONBLOCK और fcntl के साथ इस वितरण पर समर्थित नहीं हैं) का चयन कर रहे हैं और चयन() सिस्टम कॉल को निर्धारित करने के लिए कि डेटा कब लिखा जा सकता है। एनआईओ का उपयोग किया जाता है ताकि नेटवर्क की स्थिति में बिगड़ने की आवश्यकता होने पर हम समय-समय पर भेजने से बाहर निकल सकते हैं। मैं भेजने के लिए एक ही मूल कोड का उपयोग करना चाहता हूं लेकिन इसके बजाय टीसीपी/यूडीपी के बीच एक उच्च अमूर्तता में बदलना चाहता हूं। यह टीसीपी के लिए बहुत अच्छा काम करता है।अनुरोध किए गए कम बाइट्स के साथ एक गैर अवरुद्ध यूडीपी लिखना वापसी कर सकते हैं?
हालांकि मुझे चिंता है कि गैर ब्लॉकिंग आईओ यूडीपी सॉकेट के लिए कैसे काम करता है। मैं मैन पेज को गलत तरीके से पढ़ रहा हूं, लेकिन चूंकि लिखना() अनुरोध से भेजे गए कम बाइट्स को इंगित कर सकता है, इसका मतलब यह है कि क्लाइंट को अपने डेटाग्राम में कम बाइट प्राप्त होंगे? डेटा के दिए गए बफर को भेजने के लिए, कई लिखने की आवश्यकता हो सकती है, जो मामला हो सकता है क्योंकि मैं गैर अवरुद्ध आईओ का उपयोग कर रहा हूं। मुझे चिंता है कि यह ग्राहक द्वारा प्राप्त कई यूडीपी डेटाग्राम में अनुवाद करेगा।
मैं सॉकेट प्रोग्रामिंग के लिए बिल्कुल नया हूं इसलिए कृपया मुझे क्षमा करें यदि कुछ गलत धारणाएं हैं। धन्यवाद।
आप शायद जो भी सिस्टम आप काम कर रहे हैं उसके लिए विवरण जांचना चाहते हैं; आपके यूडीपी स्टैक में विशिष्ट सीमाएं हो सकती हैं (वास्तव में, जैसा कि आपने पहले ही कहा है)। – geekosaur