The joys and jilts of non-blocking sockets

Robert Amesz rcameszREMOVETHIS at dds.removethistoo.nl
Thu May 31 01:01:37 CEST 2001


I wrote:

> [Non-blocking connect under Win98, Python 2.1]
>
> But don't despair: if a connection is refused trying to connect
> again to the same host using the same socket will yield the
> following surprising exception:
> 
>    (10022, 'Invalid argument')
>    10022 =                 WSAEINVAL
> 
> Well, it accepted the parameter(s) before, so what's that all
> about? Furthermore, it doesn't make any difference if you change
> the port number, you'll get the same result. Using a different
> hostname which points to the same IP-address doesn't change
> anything either, but using a different hostname *does*, strangely
> enough. 


More weirdness. It seems you only get this error if the first and 
second connect() are roughly less than 0.9 seconds apart. If it's more 
than 0.95 seconds, you always get:

   (10035, 'The socket operation could not complete without blocking')
   10035 = EWOULDBLOCK     WSAEWOULDBLOCK

As select() will do the obvious, and just report the refused connection 
as non-writeable forever, that means you're never going to see a 
WSAEINVAL error if you only use connect() a second time when the socket 
is actually writeable.


Robert Amesz



More information about the Python-list mailing list