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: <3A271DCD.99BDDBF5@delcomsys.com> Date: Thu, 30 Nov 2000 22:41:01 -0500 From: Patrick Doyle X-Mailer: Mozilla 4.76 [en] (Win98; U) X-Accept-Language: en,zh,zh-CN,zh-TW MIME-Version: 1.0 To: cygwin Subject: Re: Why does scp leave ssh running? -- select() never returns References: <3A22C383 DOT 5C16BBC8 AT delcomsys DOT com> <3A25C7DA DOT 6F76C8DA AT delcomsys DOT com> <20001129224015 DOT B21867 AT redhat DOT com> <3A266130 DOT F5877EB5 AT delcomsys DOT com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit > Christopher Faylor wrote: > > > > On Wed, Nov 29, 2000 at 10:22:03PM -0500, Patrick Doyle wrote: > > >1) Is this behavior (of PeekNamedPipe()) a W9x bug? (That is, does it > > >work correctly on NT/2K?) > > > > I think you are correct. It is a w9x bug. I vaguely recall seeing this > > before. > > > > I can't think of any way to work around this, unfortunately. I remember trying > > things like zero byte reads on the pipe but they didn't do anything. > > > > The only way to trigger the EOF is to actually read from the pipe. > > > > cgf > If that is the case, would anybody mind if I posted a (simple) patch to > openSSH code which added a timeout to the call(s) to select()? > > (Note, I haven't tried this patch yet -- I just thought of it ... Status update... Adding the timeout to the call to select() did not solve the problem (which is consistent with Christopher's assertion that "The only way to trigger the EOF is to actually read from the pipe". Actually, I wasn't too keen about solving the problem by hacking openSSH; it would just mean that the problem had to be solved again and again for other packages. So now what? Does anybody have any suggestions for other things that I could try? I would prefer to solve this problem in cygwin1.dll, but I am, by no means, an expert windows programmer, so right now, I find myself just flailing. The two ideas I have so far are: 1) Switch from using anonymous pipes to using named pipes with unique names. According to the documentation on the MSDN web site, this is how anonymous pipes are implemented in W2K and NT. Maybe this will solve the problem, maybe it won't. Maybe it will allow me to call a function which will let me know if the other end has closed the pipe. (Most of the functions I have found on the MSDN web site are specific to named pipes). Maybe it won't. 2) Change the thread_pipe to call ReadFile() (reading one byte) instead of PeekNamedPipe() and save the result for the next call to read. This has the advantage that it would probably work (based on Christopher's comment and my own experimentation with read() vs. select()), but it looks like a heck-of-a-lot of work (read: prone to bugs) to solve such a stupid problem. Actually, suggestion #1 suffers from this con as well. Any suggestions, comments, retorts, complaints about me cluttering up your email box with trivialities that you don't care about, would be welcome, er... probably not the last one. --wpd -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com