On Thu, 12 Dec 2002, [UTF-8] Branko Čibej wrote:
> rbb@apache.org wrote:
>
> >I've done more research. Wow, this is ugly. Basically, Windows doesn't
> >allow you to open anonymous pipes in a non-blocking mode. That means that
> >it is impossible to timeout a pipe read/write. Now for the good news.
> >There are two possible solutions.
> >
> >1) Switch to using named pipes for platforms that support them. This has
> >the advantage that we can open the pipe in overlapped mode, but it won't
> >work on older versions of Windows (9x, ME specifically). This also means
> >that APR itself will have a need to get a temporary filename, because we
> >will need to have a name for the named pipe, but we can essentially forget
> >the name of the pipe immediately.
> >
> On NT-class systems (NT, 2000, XP), anonymous pipes are implemented on
> top of named pipes, using a unique pipe name. So there'd really be no
> difference if APR used this approach.
I actually knew that, but there is one difference. When opening a named
pipe, you can pass in the overlapped flag, which you can't do when opening
an anonymous pipe. :-(
> DOS-based Windows don't support named pipes, of course. Maybe it would
> be acceptable to return APR_ENOTIMPL if someone tried to open a
> non-blocking pipe on Win9x?
I could accept that.
BTW, I did more research still, and for apr_proc_create, we use named
pipes, so those can be non-blocking. That essentially means that we have
the ability to do something inside APR that we aren't exposing to our
users.
Ryan
|