delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/11/12/13:35:24

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Date: Wed, 12 Nov 2003 19:34:22 +0100
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: OpenSSL problem ? (Was Re: Pine 4.58 for Cygwin takes a very long time to close a certain IMAP INBOX)
Message-ID: <20031112183422.GE18706@cygbert.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <Pine DOT CYG DOT 4 DOT 58 DOT 0311110141330 DOT 3288 AT pervalidus> <20031111152943 DOT GA2396 AT cygbert DOT vinschen DOT de> <Pine DOT CYG DOT 4 DOT 58 DOT 0311111409110 DOT 2016 AT pervalidus> <Pine DOT GSO DOT 4 DOT 56 DOT 0311111120510 DOT 9584 AT eos> <Pine DOT CYG DOT 4 DOT 58 DOT 0311111606370 DOT 1292 AT pervalidus> <Pine DOT CYG DOT 4 DOT 58 DOT 0311120015450 DOT 2368 AT pervalidus> <20031112093525 DOT GC7542 AT cygbert DOT vinschen DOT de> <Pine DOT CYG DOT 4 DOT 58 DOT 0311121205480 DOT 600 AT pervalidus> <Pine DOT GSO DOT 4 DOT 56 DOT 0311121147090 DOT 9584 AT eos> <Pine DOT CYG DOT 4 DOT 58 DOT 0311121610400 DOT 3216 AT pervalidus>
Mime-Version: 1.0
In-Reply-To: <Pine.CYG.4.58.0311121610400.3216@pervalidus>
User-Agent: Mutt/1.4.1i

On Wed, Nov 12, 2003 at 04:15:46PM -0200, Fr?d?ric L. W. Meunier wrote:
> On Wed, 12 Nov 2003, Brian Ford wrote:
> 
> > Corinna,
> >
> > Did you get a chance to look at the strace output he posted here:
> >
> > http://pervalidus.port5.com/tmp/imap.txt.gz
> >
> > A glance there by trained eyes might save him some time.  I don't have the
> > time or the training for mine :).  It appears to be stuck in close on the
> > socket after is has shutdown?
> 
> It seems to be cause by the firewall from my SpeedStream 5200.
> 
> 'a logout' worked once I disabled filtering 'TCP NULL', but the
> Pine delays remain.
> 
> Anyway, why it worked on plain Windows and Linux is another
> story. I don't have any other firewalls enabled.

fhandler_socket::close() tries to circumvent problems with unexpected
data loss which can occur, if an application exits without having
waited for the closesocket() call being successful.  The problem with
the latter is, that there's no way to find out.  Therefore Cygwin
lingers on closesocket(), even with non-blocking sockets.  I don't
know if that helps but you could try to build a Cygwin DLL which only
lingers if shutdown hasn't been called.  I tried it with ssh and it
seems at least not to disturb ssh operation.  Patch below.

Corinna

Index: fhandler_socket.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_socket.cc,v
retrieving revision 1.111
diff -u -p -r1.111 fhandler_socket.cc
--- fhandler_socket.cc	25 Sep 2003 03:51:50 -0000	1.111
+++ fhandler_socket.cc	12 Nov 2003 18:32:18 -0000
@@ -1101,14 +1101,17 @@ fhandler_socket::close ()
 {
   int res = 0;
 
-  /* HACK to allow a graceful shutdown even if shutdown() hasn't been
-     called by the application. Note that this isn't the ultimate
-     solution but it helps in many cases. */
-  struct linger linger;
-  linger.l_onoff = 1;
-  linger.l_linger = 240; /* seconds. default 2MSL value according to MSDN. */
-  setsockopt (get_socket (), SOL_SOCKET, SO_LINGER,
-	      (const char *)&linger, sizeof linger);
+  if (!saw_shutdown_write ())
+    {
+      /* HACK to allow a graceful shutdown even if shutdown() hasn't been
+	 called by the application. Note that this isn't the ultimate
+	 solution but it helps in many cases. */
+      struct linger linger;
+      linger.l_onoff = 1;
+      linger.l_linger = 240; /* secs. default 2MSL value according to MSDN. */
+      setsockopt (get_socket (), SOL_SOCKET, SO_LINGER,
+		  (const char *)&linger, sizeof linger);
+    }
 
   while ((res = closesocket (get_socket ())) != 0)
     {


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

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


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