Interruptable connect

Corinna Vinschen
Thu Jul 4 05:14:00 GMT 2002

On Thu, Jul 04, 2002 at 01:54:33PM +0200, Thomas Pfaff wrote:
> I am trying to get an interruptable connect and i have some difficulties.
> The main problem is that it seems to be impossible to cancel a nonblocking
> connect other than closing the socket. I already thought about closing the
> socket and replacing it with a new one, but this requires that all
> sockoptions and states have to be restored for the new one execpt the
> pending connect.
> Another possibility is to set errno to EINTR, return and let the
> connect keep going.
> The app can now react in different ways :
> The signal handler terminates the program.
> Perfect.
> The program checks for the error and close the socket.
> Good.
> connect is called in a loop like
> do {
>   res = connect(...);
>   if (!res)
>     break;
> } while(errno==EINTR);
> Now the program returns to the connect function, the real connect returns
> WSAEALREADY or WSAEISCONN, it can be checked that the connect was
> interrupted and it can be continued.
> No big deal.
> The error is ignored and the socket is not closed:
> Now there are 2 possibilies.
> a. The connect fails.
> No problem.
> b. The connect succeds. Now exists an orphaned connection that can block
> the partner.
> Sigh.
> Any suggestions ?

Could you start a thread waiting for the result of the connect
and close it if it isn't already closed?


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                      
Red Hat, Inc.

More information about the Cygwin-developers mailing list