2009-10-06 10 views
5

के बीच विंसॉक एपीआई अंतर का उपयोग करते हुए यूडीपी मल्टीकास्ट ऐसा लगता है कि यूपीपी मल्टीकास्ट सॉकेट स्थापित करने के लिए आवश्यक कार्यान्वयन विंडोज एक्सपी और विंडोज विस्टा के बीच बदल गया है। विशेष रूप से:XP और Vista

  • विंडोज़ XP के अंतर्गत, आप चाहिए कॉल bind() आप किसी भी बहुस्त्र्पीय विशेष सॉकेट विकल्प संदर्भित कर सकते हैं इससे पहले कि।

  • हालांकि, विंडोज विस्टा के तहत, मल्टीकास्ट सॉकेट से निपटने पर bind() पर कॉल नहीं करना चाहिए।

इन दो बिंदुओं में से किसी एक को विफल करने के परिणामस्वरूप रनटाइम पर सॉकेट त्रुटि होती है।

क्या मैं पागल हो रहा हूं, या अन्य लोगों ने इसे भी देखा है? क्या बाइंड() कॉल के सशर्त संकलन से बेहतर समाधान है?

उत्तर

5

क्या त्रुटि आप setsockopt() कॉल करते हैं उन्हें से हो रही है के लिए खरोंच से पुनः लिखा गया IP_ADD_MEMBERSHIP लागू करने के लिए और शामिल होते हैं मल्टीकास्ट समूह?

मैंने अपने सर्वर ढांचे के साथ यहां कुछ परीक्षण चलाए हैं और मुझे लगता है कि मैं विंडोज 7 पर bind() पर कॉल करता हूं (मेरे पास एक Vista बॉक्स नहीं है) और मैं उम्मीद के अनुसार एक मल्टीकास्ट समूह में भी शामिल हो सकता हूं जब तक दोनों बाध्यकारी पता और मल्टीकास्ट पता मान्य हैं।

हालांकि मैं INADDR_ANY साथ बाँध() फोन नहीं कर सकते हैं, कि के रूप में त्रुटि 10022 (WSAEINVAL) के साथ विफल और अगर बहुस्त्र्पीय समूह पता मान्य मल्टीकास्ट एड्रेस कॉल त्रुटि 10049 के साथ विफल नहीं है बहुस्त्र्पीय समूह के शामिल होने का कारण बनता है (WSAEADDRNOTAVAIL)। जो सब काफी उचित लगता है।

मैं एक XP बॉक्स अब बूटिंग हूँ ...

XP पर

[XP पर परीक्षण के बाद संपादित] यह INADDR_ANY को bind() करने के लिए कानूनी है और यह अमान्य मल्टीकास्ट पतों का उपयोग करने के लिए कानूनी है। इसलिए, मुझे उम्मीद है कि आप उनमें से एक कर रहे हैं और इसलिए यह XP पर काम करता है और Vista/Win7 पर नहीं।

तो, आपको क्या त्रुटि मिल रही है और आप किस पते पर बाध्यकारी हैं?

1

मैं इस विशिष्ट प्रश्न के बारे में पता नहीं है, लेकिन मुझे पता है कि नेटवर्क स्टैक विस्टा

+0

बढ़िया - आपको लगता है कि वे नए कोड पर रिग्रेशन परीक्षण करेंगे? यह मुझे गुस्से में डाल देता है ... arrrrgggghhhHHH! – Thomi

0

बहुत पुराना सवाल है, लेकिन क्या कोई यह जानता है कि मशीन पर विंसॉक का कौन सा संस्करण मौजूद है?

मैं कुछ पुरानी मशीनों अभी भी XP या सर्वर 2003 का उपयोग कर लेकिन ऐसा लगता है यह एक विंडोज़ संस्करण 5.1 है, जो इससे पहले कि बाँध स्वीकार नहीं कर रहा है के लिए संभव है के लिए खिड़कियों संस्करण में मदद नहीं करता परीक्षण, है, और एक 5.2 संस्करण इसे स्वीकार करने वाला संस्करण।

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