Mail Archives: cygwin-developers/2003/02/25/07:12:57
Hi Thomas,
could we discuss this issue again? Do we have any problem to get all
required information on a socket which would keep us from closing it
and reopen a new one in the same (but unconnected) state?
Corinna
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 ?
>
> Thomas
>
>
>
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Developer mailto:cygwin AT cygwin DOT com
Red Hat, Inc.
- Raw text -