Failed non-blocking connect returns incorrect errno on AF_UNIX protocol

David Huang hzhr@linuxforum.net
Thu Mar 27 03:23:00 GMT 2003


Corinna Vinschen wrote:
> On Wed, Mar 26, 2003 at 08:48:33AM +0800, David Huang wrote:
> 
>>Failed non-blocking connect returns incorrect errno on AF_UNIX protocol.
>>See attached test program.
>>
>>On cygwin:
>>$ ./afunix
>>EINPROGRESS: Operation now in progress
>>
>>On
>>Linux 2.4 (Debian 2.2)
>>Linux 2.4 (Redhat 7.3)
>>Sun Solaris (8):
>>$ ./afunix
>>ECONNREFUSED: Connection refused
>>
>>When i comment following code:
>>//	if (fcntl (fd2, F_SETFL, O_NONBLOCK) < 0)
>>//		printf ("Failed to set fd non-blocking");
>>The result is
>>ECONNREFUSED: Connection refused
>>
>>It seems an old bug.
>>I don't know whether it effect others address/protocol families.
> 
> 
> I don't see that it's an error.  On non-blocking sockets you have to
> expect that connect() returns before being connected.  Just because
> other systems are so quick figuring out that nothing is listening on
> the other side, this doesn't invalidate the EINPROGRESS response under,
> well, slower conditions.
Well, in my test-case, /tmp/.afunix is a dead socket, connect must return
ECONNREFUSED but not EINPROGRESS, is it so?

> 
> And, btw., SUSv3 doesn't say a word that EINPROGRESS is not a valid
> response for AF_LOCAL sockets.
Yea, is it a valid response for *alive* AF_LOCAL sockets?

Please consider that, the test code i took from linc-1.0.1 (cleanup.c), because of
that, linc-cleanup-sockets works incorrect.

> Corinna
> 
Thanks.




--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list