मेरे पास एक तृतीय पक्ष लाइब्रेरी है जो HTTP सर्वर के रूप में कार्य करती है। मैं इसे एक पता और बंदरगाह पास करता हूं, जिसका उपयोग यह आने वाले कनेक्शन सुनने के लिए करता है। यह लाइब्रेरी इस तरह से सुनती है कि इसे बंदरगाह और पते का अनन्य उपयोग प्राप्त नहीं होता है। नतीजतन, मैं एक ही बंदरगाह पर कई बार सुन सकता हूं।मैं कैसे जांचूं कि एक टीसीपी पोर्ट पहले ही सुना जा रहा है या नहीं?
मुझे इसी प्रक्रिया में इस HTTP सर्वर के कई उदाहरण चलाने की आवश्यकता है। प्रत्येक उदाहरण में एक डिफ़ॉल्ट पोर्ट होता है, लेकिन यदि वह पोर्ट उपलब्ध नहीं है, तो उसे अगले उपलब्ध पोर्ट का उपयोग करना चाहिए। यह वह जगह है जहां मेरी समस्या है; मैं उसी पोर्ट पर दो HTTP सर्वर सुनकर समाप्त कर सकता हूं।
मैं HTTP सर्वर के कोड को नहीं बदल सकता और HTTP सर्वर मुझे चेतावनी नहीं देगा अगर यह पोर्ट को मैं नहीं सुन सकता, तो मुझे यह जांचने में सक्षम होना चाहिए कि प्रत्येक HTTP सर्वर शुरू करने से पहले पोर्ट पहले से उपयोग में है या नहीं । मैंने यह जांचने की कोशिश की है कि क्या एसओआरयूयूएसएडीडीआरडी सेट के साथ अपने स्वयं के सॉकेट को FALSE और SO_EXCLUSIVEADDRUSE पर सेट किया गया है, लेकिन बाध्य और सुनो कॉल दोनों सफल होते हैं जब एक मौजूदा HTTP सर्वर पहले से ही उस पोर्ट पर सुन रहा है।
यह HTTP सर्वर इस प्रभाव को कैसे प्राप्त कर रहा है, और मैं इस तरीके से एक बंदरगाह की सुनवाई कैसे कर सकता हूं?
क्या कोई कारण है कि आपको इस विशेष HTTP सर्वर लाइब्रेरी का उपयोग करना है? यह देखते हुए कि यह टूटा हुआ है, और आपके पास पर्याप्त नियंत्रण नहीं है या यह भी पता लगाने के लिए कि यह काम करने के लिए क्या कर रहा है, यह पता लगाने के लिए, स्विचिंग एक बहुत अच्छा विचार प्रतीत होता है। – abarnert
जिज्ञासा से, कौन सा पुस्तकालय है? –
"यह लाइब्रेरी इस तरह से सुनती है कि इसे बंदरगाह और पते के अनन्य उपयोग को प्राप्त नहीं होता है"। टीसीपी में यह संभव नहीं है। टीसीपी में संभव है कि पोर्ट-शेयरिंग का एकमात्र रूप अलग-अलग स्थानीय आईपी पते और उसी पोर्ट नंबर पर बाध्यकारी है। आपको फिर से जांच करने और फिर अपने प्रश्न को दोबारा सुधारने की जरूरत है। – EJP