Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , 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 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: <20031111152943 DOT GA2396 AT cygbert DOT vinschen DOT de> <20031112093525 DOT GC7542 AT cygbert DOT vinschen DOT de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: 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/