2008-12-28 17 views
5

मैं बीएसडी सॉकेट से विंसॉक तक कुछ कोड पोर्ट कर रहा हूं, और मुझे यकीन नहीं है कि नीचे दिए गए मामले को कैसे संभाला जाए।विंसॉक में फ़ाइल हैंडल और सॉकेट मिक्सिंग

मेरे मूल आवेदन दोनों stdin और नेटवर्क सॉकेट पर एक का चयन चलाता है:

FD_SET(sock, &fd); 
FD_SET(0, &fd); 
... 
if (select(..., &fd, ...)...) 

विनसॉक में इस चलाने के लिए कोशिश कर रहा एक त्रुटि 10038 (WSAENOTSOCK) देता है, जो समझ में आता है, के बाद से क्या फ़ाइल हैंडल 0 था में लिनक्स (stdin) विंडोज में सॉकेट नहीं है (अधिक सटीक: एक सॉकेट प्रकार)।

क्या इस परीक्षण को विंडोज सॉकेट में बंद करने का कोई आसान तरीका है?

उत्तर

1

विंसॉक का चयन() केवल सॉकेट के साथ काम करता है। एक और 'विंडोज-वाई' विकल्प Asynchronous I/O दोनों हैंडल पर और फिर WaitForMultipleObjects पर उपयोग करना होगा।

+0

धन्यवाद मैक्स। मैं आज कोशिश करूँगा। यह एक शर्म की बात है, हालांकि; मैं एक विंसॉक पोर्टिंग परत होने की उम्मीद कर रहा था; ऐसा लगता है कि इस बारे में एक और अधिक लिखने की आवश्यकता होगी जिसे मैंने कल्पना की थी। ओह अच्छा। – Mikeage

+1

आप एक हैंडल पर ओवरलैप्ड आईओ का उपयोग नहीं कर सकते हैं जब तक कि इसे किसी विशेष तरीके से नहीं बनाया गया हो। विशेष रूप से इसका मतलब यह है कि आप विरासत वाले हैंडल पर ओवरलैप्ड आईओ का उपयोग करने में सक्षम नहीं होंगे, जैसे कि तीन मानक धाराएं। –

2

मुझे सही होना पसंद है, लेकिन जहां तक ​​मुझे पता है, विंसॉक सॉकेट के दायरे से आगे नहीं बढ़ता है। यही है, यूनिक्स की "सबकुछ एक फ़ाइल है" चयन() के लिए दर्शन, पढ़ें(), लिखें(), आदि सिस्टम कॉल विंसॉक में नहीं है।

मुझे यकीन है कि आप सॉकेट और कंसोल हैंडल पर काम कर रहे Win32 API के साथ कुछ ऐसा ही कर सकते हैं, लेकिन यह अब विंसॉक (या बीएसडी) की तरह दिखने वाला नहीं है।

+0

मुझे लगता है कि आप सही हैं, लेकिन मुझे उम्मीद नहीं है; यही कारण है कि मैंने पूछा है। समस्या यह है कि मुझे दो अलग-अलग इनपुट स्रोतों को स्कैन करने की आवश्यकता है, और डेटा वाले पहले व्यक्ति में भाग लेना है। यूनिक्स में चुनें() इसे आसान बनाता है; मुझे नहीं पता कि विंडोज़ में ऐसा कैसे करें, हालांकि (और मैं साइगविन नहीं चाहता)। – Mikeage

+0

डॉन। मैं अगले साइगविन का सुझाव देने जा रहा था। :) –

+0

मैं एक ऐसा एप्लिकेशन पोर्ट कर रहा हूं जो पहले से ही साइगविन के साथ संकलित है, लेकिन मुझे एक मिनीजीडब्ल्यू समाधान भी चाहिए। कई लोगों के साथ एक सिस्टम पर एक विशेष cygwin1.dll से बंधे होने से कभी मजेदार नहीं होता है। – Mikeage

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