@@ -217,6 +217,7 @@ class dispatcher:
217217 debug = False
218218 connected = False
219219 accepting = False
220+ connecting = False
220221 closing = False
221222 addr = None
222223 ignore_log_types = frozenset (['warning' ])
@@ -240,7 +241,7 @@ def __init__(self, sock=None, map=None):
240241 try :
241242 self .addr = sock .getpeername ()
242243 except socket .error as err :
243- if err .args [0 ] == ENOTCONN :
244+ if err .args [0 ] in ( ENOTCONN , EINVAL ) :
244245 # To handle the case where we got an unconnected
245246 # socket.
246247 self .connected = False
@@ -334,6 +335,7 @@ def bind(self, addr):
334335
335336 def connect (self , address ):
336337 self .connected = False
338+ self .connecting = True
337339 err = self .socket .connect_ex (address )
338340 if err in (EINPROGRESS , EALREADY , EWOULDBLOCK ) \
339341 or err == EINVAL and os .name in ('nt' , 'ce' ):
@@ -393,6 +395,7 @@ def recv(self, buffer_size):
393395 def close (self ):
394396 self .connected = False
395397 self .accepting = False
398+ self .connecting = False
396399 self .del_channel ()
397400 try :
398401 self .socket .close ()
@@ -431,7 +434,8 @@ def handle_read_event(self):
431434 # sockets that are connected
432435 self .handle_accept ()
433436 elif not self .connected :
434- self .handle_connect_event ()
437+ if self .connecting :
438+ self .handle_connect_event ()
435439 self .handle_read ()
436440 else :
437441 self .handle_read ()
@@ -442,6 +446,7 @@ def handle_connect_event(self):
442446 raise socket .error (err , _strerror (err ))
443447 self .handle_connect ()
444448 self .connected = True
449+ self .connecting = False
445450
446451 def handle_write_event (self ):
447452 if self .accepting :
@@ -450,12 +455,8 @@ def handle_write_event(self):
450455 return
451456
452457 if not self .connected :
453- #check for errors
454- err = self .socket .getsockopt (socket .SOL_SOCKET , socket .SO_ERROR )
455- if err != 0 :
456- raise socket .error (err , _strerror (err ))
457-
458- self .handle_connect_event ()
458+ if self .connecting :
459+ self .handle_connect_event ()
459460 self .handle_write ()
460461
461462 def handle_expt_event (self ):
0 commit comments