मुझे यह निर्धारित करने की ज़रूरत है कि मेरा कोड नहीं बनाया गया है, जिसके लिए GetFileType()==FILE_TYPE_PIPE
, सॉकेट है या नहीं। इसके लिए एक एपीआई प्रतीत नहीं होता है।अन्य पाइप हैंडल से Win32 सॉकेट हैंडल को कैसे अलग किया जाए?
मैंने निम्नलिखित कोशिश की है। सामान्य विचार सॉकेट-विशिष्ट फ़ंक्शन का उपयोग करना और गैर-सॉकेट के रूप में विफलता का इलाज करना है।
getsockopt()
- यह मेरा पहला प्रयास था। दुर्भाग्य से ऐसा लगता है कि एक ही (गैर-सॉकेट) हैंडल पर कई धागे द्वारा बुलाया जाता है।WSAEnumNetworkEvents()
- यह ग्नुलिब करता है लेकिन अगर संभाल एक सॉकेट है तो अवांछनीय दुष्प्रभाव होंगे।getpeername()
- यह साइगविन करता है लेकिन यह कुछ सॉकेट के लिए भी असफल हो जाएगा। यह अनुमान लगाते हुए कि कोई त्रुटि सॉकेट-नेस का तात्पर्य है, विश्वसनीय और भविष्य सुरक्षित नहीं है।
मुझे कोई फर्क नहीं पड़ता कि समाधान केवल विंडोज के कुछ संस्करणों पर काम करता है, उदाहरण के लिए विस्टा, मैं सामान्य मामले में हमेशा किसी अन्य विधि पर वापस आ सकता हूं।
नहीं। मैं इसे आज़माउंगा, धन्यवाद। –