2011-02-18 18 views
5

Socket.Disconnect(bool reuse)MSDN के अनुसार प्रोग्राम सॉकेट का पुन: उपयोग करने में सक्षम बनाता है। मेरे प्रश्न हैं:सॉकेट। डिस्कनेक्ट (बूल रीयूज)

  1. यदि हम सॉकेट का पुन: उपयोग करने का निर्णय लेते हैं तो इसका मतलब यह है कि यह उसी स्थानीय अंत बिंदु का भी पुन: उपयोग करेगा? क्या यह उस सॉकेट के लिए बंदरगाह को सुरक्षित रखेगा या क्या यह सिर्फ (मुझे विश्वास नहीं है) सभी ऑब्जेक्ट संसाधनों को बचाएगा?

  2. यदि असल में यह केवल संसाधनों को सहेजता है तो उन्हें अगले कनेक्शन में आवंटित किया जाएगा और यदि ऐसा है तो भेजें/प्राप्त बफर स्वचालित रूप से फ्लश करते हैं या क्या उन्हें फ्लश करने का कोई तरीका है? क्या Socket.ShutDown(ShutDown.Both) डिस्कनेक्ट पर मेरे लिए ऐसा करता है?

  3. मैं किस स्थिति में Socket.Disconnect(false) का उपयोग करूंगा? यदि सभी उद्देश्य सॉकेट का पुन: उपयोग करना है तो यह मुझे क्या प्रदान करेगा?

+0

मैं जानता हूँ कि यह आपके प्रश्नों का स्पष्ट उत्तर नहीं मिलता है, लेकिन इस सवाल का जवाब एक .NET सॉकेट बंद करने के बीच अलग व्यवहार बारे में अधिक जानकारी देता है, और क्या प्रभाव वास्तव में खिड़कियों स्तरीय सॉकेट पर है: http: // stackoverflow.com/questions/2014887/socket-close-doesnt-really-close-tcp-socket-c सबसे अच्छा यह प्रतीत होता है कि आपको सॉकेट ऑब्जेक्ट पर शटडाउन और क्लोज़ को कॉल करके, एक अलग एंडपॉइंट की गारंटी नहीं दी जाएगी। – JNadal

उत्तर

5
  1. पुन: उपयोग = false सॉकेट बंद करने के बाद स्वचालित रूप से निपटारा किया जाएगा। एंडपॉइंट और बफर आकार के रूप में सभी सेटिंग्स डिफ़ॉल्ट पर रीसेट नहीं की जाती हैं, लेकिन यदि आप चाहें तो इसे बदल सकते हैं। मान लें कि उपयोगकर्ता कनेक्शन पोर्ट को बदलने का फैसला करता है। आपको बस सॉकेट को बंद करने, बंदरगाह को बदलने और सॉकेट को फिर से जोड़ने के बिना एक नया सॉकेट बनाने और उसे फिर से सेट करने की आवश्यकता है।

  2. सॉकेट। शटडाउन बस भेज/प्राप्त/दोनों अक्षम करता है; सॉकेट डिस्कनेक्ट न करें। हालांकि यह नए आने वाले/आउटगोइंग डेटा के लिए होता है इसलिए बफर को सामान्यीकृत किया जाएगा। सभी डेटा भेजे जाने के लिए डिस्कनेक्शन से पहले इसे कॉल करना एक अच्छा अभ्यास है और डिस्कनेक्ट करते समय कोई डेटा प्राप्त नहीं किया जा रहा है।

  3. उदाहरण के लिए लौट रहा है 1. मान लीजिए कि आपको केवल पोर्ट को बदलने की आवश्यकता है। आप सॉकेट को फिर से बनाना नहीं चाहते हैं, सॉकेट के सभी पैरामीटर को घटनाओं और बफर के रूप में फिर से कॉन्फ़िगर करें, आदि। यह समय और संसाधनों का उपभोग करता है, इसलिए आपके पास पहले से मौजूद सॉकेट का पुन: उपयोग करना बेहतर है।

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