c - कहत - हल्दिया बंदरगाह




प्रक्रिया से बाहर निकलने पर बंदरगाहों को जारी करना (2)

SO_REUSEADDR सॉकेट विकल्प का उपयोग करने से आप बिना किसी देरी के कार्यक्रम को फिर से शुरू कर सकते हैं।

int iSetOption = 1;
...
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
setsockopt(_sockfd, SOL_SOCKET, SO_REUSEADDR, (char*)&iSetOption,
        sizeof(iSetOption))
...         

मैं कैसे सुनिश्चित करूं कि एक बंदरगाह से जुड़ी गर्तिका प्रक्रिया को बाहर निकलने पर ठीक से रिलीज की जाती है, जैसे कि बंदरगाह को ईडीडीआरआईएनएसईई के साथ असफल होने के बावजूद पुन: उपयोग किया जा सकता है? मैंने एक छोटा कार्यक्रम लिखा है जो सिर्फ एक गर्तिका बनाता है, इसे एक निश्चित बंदरगाह में बांधता है, एक कनेक्शन के लिए इंतजार करता है और फिर तुरंत समाप्त होता है। जब मैं प्रोग्राम को फिर से चलाता हूं, तो ईडीडीआरआईएनएसई के साथ bind() कॉल विफल हो जाती है, लेकिन अगर मैं कुछ मिनट प्रतीक्षा करता हूं, तो यह सफल होता है

क्या कोई रास्ता है जो मैं स्पष्ट रूप से सॉकेट को "अनबाइंड" कर सकता हूं, जिससे पोर्ट संख्या को मुक्त कर सकता हूं?


टीसीपी / आईपी स्टैक close() बाद भी कुछ समय के लिए पोर्ट व्यस्त रहता है - सॉकेट TIME_WAIT और TIME_WAIT2 राज्य में रहेगा।

अगर मैं गलत नहीं हूं, तो आम तौर पर इसे 2 मिनट लगते हैं, यदि आपको उसी पोर्ट का उपयोग करने की आवश्यकता होती है, तो आपके सॉकेट पर बाध्यकारी से पहले ही SOVUUSEADDR विकल्प सेट करें, जैसे Ivo Bosticky का सुझाव।





sockets