आप नहीं 'अलग' एक Boost.ASIO सॉकेट कर सकते हैं। asio::socket
ऑब्जेक्ट से संभालने के लिए आप native_handle()
सदस्य फ़ंक्शन का उपयोग कर सकते हैं, लेकिन आपको यह सुनिश्चित करना होगा कि asio::socket
ऑब्जेक्ट तब तक नष्ट नहीं हो जाता जब तक आप SOCKET
के साथ नहीं कर लेते। यह देशी SOCKET
के स्वामित्व को जारी रखता है और इसे नष्ट करने पर इसे बंद कर देगा।
एंड्रै की तरह सुझाव दिया गया है, तो आप सॉकेट हैंडल को डुप्लिकेट कर सकते हैं। हालांकि, मैं इस सॉकेट को डुप्लिकेट करने पर विचार नहीं करूंगा, क्योंकि बूस्ट.एएसआईओ स्वचालित रूप से मूल SOCKET
को I/O पूर्णता पोर्ट के साथ संभालता है। यदि .NET सॉकेट रैपर या कोई अन्य कोड डुप्लीकेट सॉकेट को एक अलग I/O समापन पोर्ट से संबद्ध करने का प्रयास करता है, तो एक त्रुटि उत्पन्न होगी। मुझे पता है कि .NET 2.0 सॉकेट क्लास वास्तव में SOCKET
एसिंक्रोनस ऑपरेशंस के लिए I/O समापन पोर्ट के साथ संभालती है। हालांकि, यह हाल के संस्करणों में बदल सकता है।
स्रोत
2011-09-21 17:10:04
कोई विकल्प नहीं, एक कन्स्ट्रक्टर जो (लपेटा हुआ) सॉकेट हैंडल लेता है वह निजी है। –
@ हंसपैसेंट: हाँ, लेकिन [यह एक] (http://msdn.microsoft.com/en-us/library/ms145125.aspx) सार्वजनिक है। चेतावनी: बैटरी शामिल नहीं है। –