www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/2003/02/25/13:06:42

Mailing-List: contact cygwin-developers-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-developers-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-developers/>
List-Post: <mailto:cygwin-developers AT cygwin DOT com>
List-Help: <mailto:cygwin-developers-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-developers-owner AT cygwin DOT com
Delivered-To: mailing list cygwin-developers AT cygwin DOT com
Date: Tue, 25 Feb 2003 19:04:38 +0100
From: Corinna Vinschen <vinschen AT redhat DOT com>
To: cygwin-developers AT cygwin DOT com
Subject: Re: Interruptable connect
Message-ID: <20030225180438.GT8853@cygbert.vinschen.de>
Reply-To: cygwin-developers AT cygwin DOT com
Mail-Followup-To: cygwin-developers AT cygwin DOT com
References: <20030225121251 DOT GF8853 AT cygbert DOT vinschen DOT de> <Pine DOT WNT DOT 4 DOT 44 DOT 0302251335100 DOT 349-100000 AT algeria DOT intern DOT net> <20030225141855 DOT GK8853 AT cygbert DOT vinschen DOT de> <20030225143208 DOT GM8853 AT cygbert DOT vinschen DOT de>
Mime-Version: 1.0
In-Reply-To: <20030225143208.GM8853@cygbert.vinschen.de>
User-Agent: Mutt/1.4i

On Tue, Feb 25, 2003 at 03:32:08PM +0100, Corinna Vinschen wrote:
> On Tue, Feb 25, 2003 at 03:18:55PM +0100, Corinna Vinschen wrote:
> > On Tue, Feb 25, 2003 at 02:53:41PM +0100, Thomas Pfaff wrote:
> > > SO_ERROR seems to be difficult because setsockopt does not allow to set
> > > it (and i don't know which error should be set after an interrupted
> > > connect. Maybe you could check this on Linux).
> > 
> > I don't think SO_ERROR hurts badly.  We could memorize the error code
> > WSAEINTR (which should be the correct error code on an interrupted
> > call) up to the next application call to Cygwin's getsockopt(SO_ERROR). 
> > In Cygwin's getsockopt() we can call the WinSock getsockopt and if that
> > returns an error value of 0, we return the old error code instead and
>                                          ^^^^^^^^^^^^^^^^^^
> 					 WSAEINTR, that is.
> 
> Corinna
> 
> > set it to 0.  Otherwise we just return the new error code.  From then on,
> > back to normal.

Btw. Thomas, do you have the Stevens book "UNIX Network Programming"? 
The end of chapter 15.5 contains the sub chapter "Interrupted connect"
which states 

  What happens if our call to connect on a normal blocking socket is
  interrupted, say, by a caught signal, before TCP's three-way handshake
  completes?  Assuming the connect is not automatically restarted, it
  returns EINTR.  But we cannot call connect again to wait for the
  connect to complete.  Doing so will return EADDRINUSE.

  What we must do in this scenario is call select, just as we have done
  in this section for a nonblocking connect.  Then select returns when
  the connection completes successfully (making the socket writable) or
  when the connection fails (making the socket readable and writable).

So, IIUC, connect isn't supposed to stop the TCP layer further trying
to connect!  Which means, I hope, appropriately screwing your accept()
code into connect() in fhandler_socket.cc should be completely sufficient
to solve our problem.

Or do I miss something here?

Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                                mailto:cygwin AT cygwin DOT com
Red Hat, Inc.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019