इस के बाद से, एक बहु सवाल यह है कि मैं अपनी संतुष्टि के लिए प्रत्येक भाग का जवाब देने की मेरी पूरी कोशिश करेंगे:
1) यह मेरा अनुभव हो गया है एएसआईओ सॉकेट के साथ कि विनाशक सॉकेट को बंद कर देता है। हालांकि, मैंने केवल टीसीपी सॉकेट के साथ निपटाया है। इसे जांचने का सबसे अच्छा तरीका यह है कि विनाशक के लिए कोड को देखने के लिए बस यह देखने के लिए कि क्या यह नज़दीक जैसा कुछ करता है। मुझे पता है कि बूस्ट कोड चलने के लिए थोड़ा मुश्किल हो सकता है, इसलिए बस एक छोटा नमूना प्रोग्राम बनाना आसान हो सकता है जो यूडीपी सॉकेट खोलता है और फिर इसे नष्ट कर देता है। इस तरह आप तर्क का पालन करने के लिए डीबगर में कोड के माध्यम से कदम उठा सकते हैं।
चूंकि बूस्ट के डिजाइनरों ने इसे टीसीपी सॉकेट के लिए ध्यान में रखा, इसलिए मुझे लगता है कि वे यूडीपी सॉकेट के लिए ऐसा नहीं करेंगे।
2) shutdown()
पर कॉल करें जब आपको लगता है कि किसी भी कोड को भविष्य में recv
और/या send
सॉकेट पर करने से रोकने के लिए आवश्यक है। यह आम तौर पर आवश्यक नहीं है, हालांकि मैंने इसे देखा है जब यह बंद होने पर RST
भेजने के लिए सॉकेट को मजबूर करने के लिए टीसीपी सॉकेट पर उपयोग किया जाता है (लंबित "सुंदर" शटडाउन के विपरीत जहां लंबित भेज संसाधित होते हैं)।
3) आप सॉकेट को दो-चैनल संचार के रूप में सोच सकते हैं: एक पढ़ने के लिए, दूसरा भेजने के लिए। आप किसी एक को दूसरे से स्वतंत्र रूप से बंद कर सकते हैं, और जब आप बंद हो जाते हैं तो आप एक चैनल का उपयोग करना जारी रख सकते हैं (यानी आप अभी भी भेजने के लिए बंद करने के बाद प्राप्त कर सकते हैं और इसके विपरीत)। एक सॉकेट बंद करना दोनों recv पर शट डाउन कॉल करने और भेजने के समान है।
आरईवी के लिए बंद करना बस आपके कोड को और डेटा पढ़ने से रोकता है। यदि आप ऐसा करने का प्रयास करते हैं, तो आपको सॉकेट त्रुटि मिल जाएगी। इसी तरह, यदि कनेक्शन का दूसरा पक्ष आपको डेटा भेजने का प्रयास करता है, तो उसे एक त्रुटि मिलेगी (टीसीपी दुनिया में फिर से स्विच करने के लिए खेद है, लेकिन मेरा मानना है कि RST
प्रेषक को वापस जवाब दिया जाता है)।
इसी तरह भेजने के लिए बंद करना आपके कोड को और डेटा भेजने से रोकता है। अगर स्मृति सही ढंग से मेरी सेवा करती है, तो यह लगता है कि जब आप सॉकेट बंद करते हैं तो क्या होता है (एक शून्य-लंबाई पैकेट को दूसरी तरफ सिग्नल करने के लिए भेजा जाता है जिसे विशेष चैनल बंद कर दिया गया है)। भेजने के लिए कोई भी भविष्य प्रयास एक त्रुटि लौटाएगा।
4) आपको निश्चित रूप से जानने के लिए अपने दस्तावेज़ों को देखना होगा। MSDN आपको एक बहुत अच्छा संकेत देगा, हालांकि मुझे नहीं पता कि मैं इसे आधिकारिक मानता हूं।
धन्यवाद, मैं इस में से कुछ पता चल गया है, लेकिन अभी भी अनिश्चित पास() वास्तव में सॉकेट नाशक में कहा जाता है कि क्या कर रहा हूँ। जो मैंने वास्तव में नहीं किया था वह बूस्ट एएसओ और पारंपरिक नेटवर्क प्रोग्रामिंग के बीच घनिष्ठ संबंध था। शटडाउन() और एमएसडीएन सॉकेट त्रुटि कोडों को देखने के लिए सुझाव दोनों की यह जानकारी बताती है। +1 – Torleif
खुशी मैं मदद कर सकता हूं :) – Brian
एफडब्ल्यूआईडब्लू, कॉलिंग। शटडाउन (दोनों) एक यूडीपी सॉकेट पर मेरे लिए विंडोज पर काम करता है, लेकिन लिनक्स पर उड़ाता है क्योंकि सॉकेट कनेक्ट नहीं होता है। –