2010-08-07 20 views
31

मेरे पास एक सॉकेट है जिसे मैं कनेक्ट करते समय टाइमआउट करना चाहता हूं ताकि अगर मैं कनेक्ट नहीं कर पा रहा हूं तो मैं पूरे ऑपरेशन को रद्द कर सकता हूं, यह सॉकेट के लिए मेकफ़ाइल का भी उपयोग करना चाहता है जिसके लिए कोई टाइमआउट नहीं है।पायथन सॉकेट कनेक्शन टाइमआउट

क्या ऐसा करने का कोई आसान तरीका है या यह करना मुश्किल काम है?

अजगर टाइमआउट के एक रीसेट के बाद जुड़ा ताकि मैं makefile का उपयोग करें और अभी भी गर्तिका कनेक्शन के लिए समय समाप्त हो सकता है

उत्तर

56

तुम बस connect() प्रयास करने से पहले सॉकेट settimeout() विधि का उपयोग करने की जरूरत है, कृपया ध्यान दें कि अनुमति नहीं है सॉकेट को ब्लॉक करने के तरीके में सेट करने के लिए आपको settimeout(None) से कनेक्ट करने के बाद, मेकफ़ाइल के लिए आवश्यक है। यहाँ कोड मैं का उपयोग कर रहा है:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.settimeout(10) 
sock.connect(address) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+5

जानकारी के लिए उपयोग करने के लिए सुविधाजनक है, टाइमआउट सेकंड में व्यक्त किया जाना चाहिए। –

8

आप python2.6 उपयोग कर रहे हैं या नए, यह socket.create_connection

sock = socket.create_connection(address, timeout=10) 
sock.settimeout(None) 
fileobj = sock.makefile('rb', 0) 
+0

यूनिक्स सॉकेट के लिए बहुत मदद नहीं कर रहा है – Pierrot

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