Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Message-ID: <3B6E88FE.70BF483@hplb.hpl.hp.com> Date: Mon, 06 Aug 2001 13:09:34 +0100 From: Bill Petheram Organization: TESL, HP Labs Bristol X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.3-20mdksmp i686) X-Accept-Language: en MIME-Version: 1.0 To: Corinna Vinschen , Lapo Luchini Subject: Re: Rsync: found the problem References: <610A1F4808E9D411888F0001023F6361A2EC AT MUCX> <3B46E116 DOT 20508 DOT C8E5ACB AT localhost> <20010707095422 DOT C7298 AT redhat DOT com> <3B499BF7 DOT 6D8FCABC AT hplb DOT hpl DOT hp DOT com> <20010709222226 DOT A16128 AT cygbert DOT vinschen DOT de> <3B6960FA DOT 8099DD72 AT hplb DOT hpl DOT hp DOT com> <3B6A943A DOT 10E925C8 AT hplb DOT hpl DOT hp DOT com> <20010803190741 DOT Z23782 AT cygbert DOT vinschen DOT de> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Is it a bug or a feature? Internally cygwin uses a flag OLD_O_NDELAY with the value 0x0004. This is used for backward compatibility (according to the comment). There is code to check that if either the OLD_O_NDELAY flag is set or if O_NDELAY (0x4000) is set they both get set. So when rsync does a GETFL it does the 'normal':- val &= ~NONBLOCK_FLAG to set to blocking. Unfortunately the OLD_O_NDELAY bit is still set so the when the SETFL is called is sets the O_FNDELAY bit as well. Obviously this means that once a socket is set to non-blocking mode it cannot be reset using this method. Note that the OLD_O_NDELAY is not defined in the installed header files, only internally to cygwin. I think that it is not possible to run old executables with newer DLLs, so may be the OLD_O_NDELAY flag can be removed. I added this patch to rsync.h 470a471,474 > #ifdef __CYGWIN32__ > #define OLD_O_NDELAY 0x0004 > #define NONBLOCK_FLAG (O_NONBLOCK | OLD_O_NDELAY) > #else 476a481 > #endif This fixes the problem for rsync. bill -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/