2010-07-22 6 views
7

मुझे याद है कि कहीं भी पढ़ना है कि एक सॉकेट को दो स्वतंत्र आधा-डुप्लेक्स चैनल माना जा सकता है। क्या इसका मतलब यह है कि recv() और उसी सॉकेट के send() वास्तव में अप्रासंगिक हैं?क्या यह एक सॉकेट पर एक साथ recv() और भेजने() को सुरक्षित है?

  • यदि हां, तो क्या यह परिभाषा या कार्यान्वयन-विशिष्ट है?
  • यदि नहीं, तो दोनों एक दूसरे के साथ कैसे हस्तक्षेप करते हैं?

धन्यवाद।

+1

प्रोटोकॉल पर निर्भर करता है। टीसीपी पूर्ण-डुप्लेक्स है, इसलिए हां। –

+0

धन्यवाद, क्या आपके पास कोई काउंटर-उदाहरण है? या कोई अन्य संदर्भ लिंक/कोड ताकि मैं पढ़ सकूं? –

उत्तर

1

मुझे उत्सुकता है कि आपको लगता है कि वे एक दूसरे के साथ हस्तक्षेप करेंगे। क्या आप सोच रहे हैं कि आप जो भेजते हैं वह आपको प्राप्त हो सकता है?

+1

नहीं, मेरा मतलब है कि अगर कोई ऐसा करता है, तो दूसरे के व्यवहार की शुद्धता या दक्षता को कैसे प्रभावित किया जा सकता है। उदाहरण के लिए, यदि वे एक ही बफर साझा करते हैं, तो संभव है कि किसी को तब तक इंतजार करना पड़े जब तक कि दूसरा निष्क्रिय न हो, है ना? –

+1

आप ब्लॉकिंग या गैर-अवरुद्ध भेज सकते हैं और प्राप्त कर सकते हैं। अवरुद्ध करने के साथ, डेटा बफर जो आप पास करते हैं वह डेटा बफर है। भ्रम की कोई संभावना नहीं है। गैर-अवरुद्ध होने के साथ, आपके डेटा बफर की प्रतिलिपि बनाई गई है। इंटरलीव किए गए उपयोग के संबंध में एपीआई दस्तावेज में कोई प्रतिबंध नहीं हैं, इसलिए वे अलग-अलग बफर का उपयोग कर रहे हैं; अगर वे नहीं थे, तो वे गैर-अवरुद्ध नहीं हो पाएंगे (उन्हें एक-दूसरे पर अवरुद्ध करना होगा)। –

1

सॉक्रॉम्रीम के मामले में, आप एक साथ भेजें/recv का उपयोग कर सकते हैं।

पूर्व: मान लीजिए आप दो धागे हैं, एक डेटा और दूसरा एक डेटा आप निम्नलिखित

मुख्य नियमित कर सकते हैं प्राप्त करने के लिए जिम्मेदार है भेजने के लिए जिम्मेदार है: एक सॉकेट fd मिलता है। इस एफडी में बफर भेजने के लिए एक पॉज़िक्स थ्रेड बनाएं। इस एफडी से प्राप्त डेटा प्राप्त करने के लिए एक पॉज़िक्स थ्रेड बनाएं। किसी सर्वर से कनेक्ट करें।

थ्रेड 1 नियमित: एक संदेश बफर का निर्माण; इस एफडी में बफर भेजें।

थ्रेड 2 नियमित: इस एफडी से आरईवी डेटा। तिथि को संसाधित करें।

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