यह प्रश्न पायथन तक सीमित नहीं है। यह एक सामान्य सॉकेट सवाल है। मेरे पास एक गैर-अवरुद्ध सॉकेट है और एक मशीन से कनेक्ट करना चाहता है जो पहुंच योग्य है - दूसरी ओर बंदरगाह मौजूद नहीं है। क्यों चुनें (...) वैसे भी सफल? मुझे एक टाइमआउट की उम्मीद थी। sock.send (...) एक टूटी पाइप के साथ विफल रहता है। मैं कैसे निर्धारित कर सकता हूं कि चयन (...) के बाद सॉकेट वास्तव में कनेक्ट है या नहीं? अग्रिम धन्यवाद।गैर-अवरुद्ध कनेक्ट
import socket, errno, os, time, select
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
err = sock.connect_ex(('192.168.178.21', 12345))
ready_to_read, ready_to_write, in_error = select.select([], [sock], [], timeout=5)
#ready_to_write is set even 192.168.178.21:12345 does not exist.
sock.setblocking(1)
sock.send('foo') #this fails
sock.close()
sock.getsockopt (सॉकेट.SOL_SOCKET, सॉकेट.SO_ERROR) ने मेरे लिए चाल बनाई। – HelloWorld
ठीक है। ध्यान रखें कि 'getockopt() 'वापसी और सॉकेट को पढ़ने या लिखने के आपके प्रयास के बीच सॉकेट बंद हो सकता है। इसलिए आपको अभी भी भेजने/recv पर त्रुटियों को संभालने का प्रयास करना चाहिए। – mpontillo