2011-01-13 19 views
7

मैं विंडोज में एक लिनक्स सर्वर चलाने की कोशिश कर रहा हूं।विंडोज में सॉकेट और हैंडल के बीच क्या अंतर है?

सॉकेट और फ़ाइल डिस्क्रिप्टर को लिनक्स में समान माना जाता है। कुछ सिस्टम एपीआई दोनों सॉकेट और फ़ाइल डिस्क्रिप्टर के लिए उपलब्ध हैं।

हालांकि, मैं WIN API द्वारा विंसॉक और हैंडल (फ़ाइल डिस्क्रिप्टर) द्वारा सॉकेट से निपटता हूं।

तो मुझे एक पूर्णांक पता होना चाहिए एक सॉकेट या हैंडल है।

सॉकेट() और खुले() से वापसी मान Windows में एक ही होगा:

अब यहाँ सवाल है?

वे हमेशा भिन्न हैं, तो मैं अपने ही सॉकेट() और खुले() लिख सिस्टम के एक रैप करने के लिए कर सकते हैं। और सिस्टम के एपीआई से रिटर्न वैल्यू रिकॉर्ड करें कि पूर्णांक सॉकेट या हैंडल है या नहीं।

यदि वे वही होंगे, तो मुझे इसका निपटारा करने का कोई विचार नहीं है।

+0

'वही' किस अर्थ में? – EJP

+0

वैल्यू में वही है। – Celebi

उत्तर

10

सॉकेट हैंडल Win32 (NT कर्नेल) हैंडल हैं, उदाहरण के लिए, आप ReadFile, या WriteFile का उपयोग कर सकते हैं। विन्डॉक द्वारा बनाए गए हैंडल से जुड़े उपयोगकर्ता-मोड राज्य भी हैं, यही कारण है कि आपको CloseHandle() के बजाय closesocket() का उपयोग करने की आवश्यकता है।

खुला() सीआरटी फ़ाइल डिस्क्रिप्टर देता है जो Win32 हैंडल से अलग है। आप _open_osfhandle() का उपयोग कर एक सीआरटी फ़ाइल डिस्क्रिप्टर बना सकते हैं। लेकिन यह सॉकेट के लिए पुनः संयोजित नहीं है क्योंकि आप फ़ाइल को एक साफ तरीके से बंद नहीं कर सकते हैं। आप या तो करीबी() का उपयोग करते हैं जो विंसॉक उपयोगकर्ता-मोड स्थिति, या क्लोजसेट() को रिसाव करेगा जो सीआरटी डिस्क्रिप्टर को रिसाव करेगा।

+0

यदि संभव हो, तो क्या आप समझा सकते हैं कि 'सॉकेट' हैंडल से कितना और किस प्रकार का उपयोगकर्ता मोड राज्य जुड़ा हुआ है? यह महत्वपूर्ण है क्योंकि कैश जैसे राज्य इस बात को प्रभावित कर सकते हैं कि कैसे सॉकेट फ़ंक्शन गैर-सॉकेट फ़ंक्शंस के साथ इंटरैक्ट करते हैं। –

+0

@ सेवन, विंसॉक 2 में "स्तरित सेवा प्रदाता" आर्किटेक्चर है, इसलिए विंसॉक हैंडल से प्रदाता तक मैपिंग रखता है। प्रत्येक प्रदाता अतिरिक्त राज्य रख सकता है। क्या अतिरिक्त राज्य रखा जाता है (यदि कोई है) कार्यान्वयन विस्तार है। एलएसपी शायद भेजे गए या प्राप्त डेटा को कैश/बफर नहीं करते हैं क्योंकि इससे सॉकेट हैंडल पर रीडफाइल या लिखेंफाइल का उपयोग करने वाले अनुप्रयोगों के साथ संगतता टूट जाएगी। – John

-1

सॉकेट() से वापसी मूल्य और विंडोज़ में खुला() समान होगा?

विंडोज़ में सॉकेट हैंडल WINSOCK सबसिस्टम द्वारा आवंटित किए जाते हैं जो फ़ाइल सिस्टम का हिस्सा नहीं है।

+0

यह अतीत में अब तक सच साबित होता था लेकिन विंडोज एनटी सॉकेट हैंडल के रूप में अब पूर्ण कर्नेल ऑब्जेक्ट्स हैं और पूरी तरह से उपयोगकर्ता मोड डीएलएल के रूप में लागू नहीं किए गए हैं, हालांकि आज भी कुछ उपयोगकर्ता मोड स्थिति है। –

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