linux - How do I re-bind a socket in MacOSX/Ubuntu? A second time -
मेरे पास निम्न कोड है:
यदि ((m_mainSocket = :: सॉकेट (PF_INET) , SOCK_STREAM, IPPROTO_TCP)) & lt; 0) {फेंक अपवाद (__FILE__, __LINE__) & lt; & lt; "सॉकेट बनाने में असमर्थ"; } पर इंट (0); अगर (सेटोकोपेट (एम_मैन सॉकेट, एसओओएलओककेट, एसओयूयूएसीएडीडीआर, एंड ऑर, साइकोफ (ऑन))) (अपवाद फेंक (__FILE__, __LINE__) & lt; & lt; "सर्वर सॉकेट पुन: प्रयोज्य नहीं बना सकता।"; } Sockaddr_in addr; मेम्सेट (& amp; addr, 0, आकार (addr)); Addr.sin_family = AF_INET; Addr.sin_addr.s_addr = htonl (INADDR_ANY); Addr.sin_port = htons (p_localPort); यदि (:: बाइंड (एम_मैन सॉकेट, रीइन्टरिप_कास्ट & lt; सोकैड्र * & gt; (एंड एन्डर), साइफफ (एडीआर)) & lt; 0) अपवाद (__FILE__, __LINE__) & lt; & lt; "सर्वर सॉकेट बाइंड करने में विफल"; }
जब मैं सर्वर बंद कर देता हूं, तो couse के बंद () के साथ, मैं एक ही बंदरगाह में फिर से सर्वर को नहीं खोल सकता। क्यूं कर? मुझे बंदरगाह बदलने या सिस्टम रिबूट करना होगा यह केवल उबुन्तु और मैकओएसएक्स में होता है विंडोज़ में मुझे यह समस्या नहीं है।
:: बाइंड () फ़ंक्शन में त्रुटि। यह दो बार दोबारा सॉकेट करने की अनुमति नहीं देता है।
मैं कैसे फिर से बाँध करूँ?
आपको 1, नहीं 0, REUSEADDR को पास करना होगा।
सॉकेट (7)
आदमी पृष्ठ से:
सॉकेट विकल्प इन सॉकेट विकल्पों को सेटोकॉप (2) का उपयोग करके सेट किया जा सकता है और सभी सॉकेट्स के लिए सॉकेट स्तर पर सेट सॉकेट स्तर के साथ होक्कोपेट (2) के साथ पढ़ा जा सकता है: .... SO_REUSEADDR इंगित करता है कि एक बाइंड में दिए गए पते मान्य करने के लिए उपयोग किए गए नियम (2) कॉल को स्थानीय पते के पुन: उपयोग की अनुमति देनी चाहिए। एएफआईएनईटीईटी सॉकेट्स के लिए इसका मतलब है कि एक गर्तिका बाइंड हो सकती है, सिवाय इसके कि जब पता करने के लिए बाध्य एक सक्रिय सुनवाई गर्त है जब किसी विशेष पोर्ट के साथ INADDR_ANY को सुनना गर्तिका बाध्य होती है तो किसी भी स्थानीय पते के लिए इस बंदरगाह को बाइंड करना संभव नहीं है। तर्क एक पूर्णांक बूलियन ध्वज है
Comments
Post a Comment