2010-11-12 12 views
21

एक यूडीपी सॉकेट पर डिफ़ॉल्ट (अवरुद्ध) व्यवहार का उपयोग करते समय, किस मामले में sendto() ब्लॉक करने के लिए एक कॉल होगा? मुझे लिनक्स व्यवहार में अनिवार्य रूप से रूचि है।एक यूडीपी sendto() ब्लॉक कब करता है?

टीसीपी के लिए मैं समझता हूं कि भेजने की खिड़की भरने पर संकुचन नियंत्रण भेजने() कॉल अवरुद्ध करता है, लेकिन यूडीपी के बारे में क्या है? क्या यह कभी-कभी अवरुद्ध करता है या पैकेट को कम परतों पर छोड़ने देता है?

उत्तर

14

यदि आप अपना सॉकेट बफर भर चुके हैं तो यह हो सकता है, लेकिन यह अत्यधिक ऑपरेटिंग सिस्टम निर्भर है। चूंकि यूडीपी कोई गारंटी नहीं देता है कि आपका ऑपरेटिंग सिस्टम जो भी चाहता है वह करने का फैसला कर सकता है जब आपका सॉकेट बफर भरा होता है: ब्लॉक या ड्रॉप करें। आप अस्थायी राहत के लिए SO_SNDBUF को बढ़ाने का प्रयास कर सकते हैं।

यह आपके सिस्टम की अच्छी ट्यूनिंग पर भी निर्भर हो सकता है, उदाहरण के लिए यह आपके नेटवर्क इंटरफ़ेस के ड्राइवर में TX अंगूठी के आकार पर भी निर्भर हो सकता है। iperf mailing list में इसके बारे में कुछ चर्चाएं हैं, लेकिन आप वास्तव में डेवलपर्स के डेवलपर्स के साथ इस पर चर्चा करना चाहते हैं।

+1

ठीक है, आपके लिंक के बाद मुझे [इस धागे] पर लिनक्स-विशिष्ट स्पष्टीकरण मिला (http://www.mail-archive.com/[email protected]/msg00113.html)।तो सरल सरलीकृत उत्तर: _Linux एक पूर्ण भेजने buffer_ पर ब्लॉक भेजो। –

+2

ठीक है, लेकिन अब सवाल सिर्फ एक कदम आगे धकेल दिया गया है: लिनक्स को सॉकेट बफर भरने के लिए कौन सी स्थितियों के तहत? (इसके बाहर पैकेट छोड़ने के विरोध में)। दुर्भाग्य से यह एक बहुत मुश्किल सवाल है। – MarcH

+0

@MarcH, कैसे recv के बारे में, सॉकेट अवरुद्ध करते समय भेजें? मुझे लगता है कि इस मामले में भेजना और आरईवी वैसे भी ब्लॉक करेगा? – Bionix1441

9

ऐसा इसलिए हो सकता है क्योंकि आपका ऑपरेटिंग सिस्टम दूरस्थ होस्ट के हार्डवेयर पते को प्राप्त करने के लिए एआरपी अनुरोध करने का प्रयास कर रहा है।

मूल रूप से जब भी कोई पैकेट निकलता है, तो शीर्षलेख को दूरस्थ होस्ट का आईपी पता और दूरस्थ होस्ट के मैक पते की आवश्यकता होती है। 1 9 2.168.1.34 और एबी: 32: 24: 64: एफ 3: 21।

आपका "ब्लॉक" व्यवहार यह हो सकता है कि एआरपी काम कर रहा है।

मैंने विंडोज़ के पुराने संस्करणों (2k मुझे लगता है) में सुना है, कि अगर अनुरोध बहुत लंबा हो रहा है और आप बहुत अधिक डेटा भेज रहे हैं तो पहला पैकेट कभी-कभी त्याग दिया जाएगा। एक सेवा पैक शायद तब से तय किया गया है।

+0

ठीक है, अच्छा उत्तर देने वाला तत्व, दिलचस्प; लेकिन मुझे जो दिलचस्पी है वह अधिकतर अवरोध/पूर्ण बफर से संबंधित अवरुद्ध (या अवरोध की अनुपस्थिति) है। –

+0

एआरपी का उपयोग केवल उसी सबनेट पर मेजबानों को ढूंढने के लिए किया जाता है - आमतौर पर राउटर। और परिणामों को बाद में भेजने के लिए कैश किया जाता है। – selbie

+2

जब कोई आईपी पैकेट बाहर जाता है तो उसे दूरस्थ होस्ट का आईपी पता और ** अगले हॉप ** के मैक पते की आवश्यकता होती है ... –

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