2011-09-20 11 views
5

प्रोग्राम सर्वर से कनेक्ट होता है, और जब कनेक्शन सर्वर से बंद होता है, तो यदि मैं इसे फिर से कनेक्ट करने का प्रयास करता हूं तो कहता है: socket.error: [Errno 9] Bad file descriptor
यदि मैं क्लाइंट में सॉकेट बंद करता हूं और फिर मैं पुनः कनेक्ट करने का प्रयास करता हूं, तो यह कहता है: socket.error: [Errno 106] Transport endpoint is already connectedटूटी हुई पाइप के बाद मैं सॉकेट को दोबारा कैसे जोड़ सकता हूं?


क्या कोई नया सॉकेट बनाने के बिना टूटी हुई पाइप के बाद इसे फिर से कनेक्ट करने का कोई तरीका है?

import socket 
host = '127.0.0.1' 
port = 1337 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
def loop(): 
    try: 
     while 1: 
      print s.recv(512) 
    except socket.error: 
     #s.close()? 
     connect() 
def connect(): 
    s.connect((host, port)) 
    loop() 
connect() 

उत्तर

9

यह मानते हुए एक कनेक्शन उन्मुख सॉकेट है:

नहीं, आप एक पुरानी बंद करके एक नया सॉकेट बनाने के लिए,

+1

इसका कारण यह है कि एक सॉकेट कनेक्शन ऑपरेटिंग सिस्टम स्तर पर प्रबंधित होता है (और यह किसी प्रोग्रामिंग भाषा के लिए जाता है)। लिनक्स के तहत, एक कनेक्शन डिस्क्रिप्टर कनेक्शन के लिए आवंटित किया जाता है जो कनेक्शन बंद होने पर नष्ट हो जाता है, इसलिए आपको फिर से कनेक्ट करने की आवश्यकता होती है जो एक नई फ़ाइल डिस्क्रिप्टर बनाता है। – EdwardGarson

1

फ़ाइल वर्णनकर्ता तो बुरा आप को रिहा करने की आवश्यकता होगी है वह संसाधन और एक नई सॉकेट बनाएं। यह आपको एक नई फाइल डिस्क्रिप्टर मिलेगा।

यदि कनेक्शन असामान्य रूप से समाप्त हो गया है, तो आपको सर्वर को फिर से कनेक्ट करने से पहले कनेक्शन के अंत को बंद करने के लिए इंतजार करना होगा। यह देखने के लिए कि क्या आप अपनी नई सॉकेट के साथ कनेक्शन पुनः स्थापित कर सकते हैं, मैं इसे अक्सर बार-बार मतदान करता हूं (लेकिन अक्सर नहीं)।

आपको खराब पाइप त्रुटि कितनी बार मिलती है?

+0

जब मैं सर्वर में कनेक्शन बंद करता हूं तो मुझे त्रुटि मिलती है। मैं क्या सोच रहा हूं कि एक ही सॉकेट के साथ सर्वर पर रिकॉन्क्ट करने का कोई तरीका है या नहीं। –

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