non-blocking accept() can hang.

Corinna Vinschen
Tue Feb 19 14:46:00 GMT 2013

On Feb 12 10:52, Tanaka Akira wrote:
> 2013/2/8 marco atzeri <>:
> > you can also test by yourself
> >
> I see.  I re-tested after replacing /bin/cygwin1.dll.
> Unfortunately, the program still block.
> (Good news is that ^C is effective.
> I don't need to kill the process using Windows task manager.)

Sorry for the late response, but I'm pretty busy with porting Cygwin to
64 bit right now.

I debugged your example code, and it can't work on Cygwin.  The problem
is that accept/connect on AF_LOCAL sockets performs a handshake
operation to make sure that the other side of the socket is a Cygwin
process as well, and to propagate credential information between
client and listener.  The way it's implemented right now requires that
both sides of the socket are responsive.  That's a safe thing for the
accept call here, but since there's neither a blocking connect, nor a
select or poll call waiting on the connecting side of the socket, nothing
goes forward.

To get this code working, you have to use either AF_INET or AF_INET6
sockets, or you have to start a thread calling select or poll, so
there's an active function call which allows to perform the handshake
from the connecting side.


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Problem reports:
Unsubscribe info:

More information about the Cygwin mailing list