Reliable Datagram / Stream behaviour of NT Pipes

Juan Lang juan.lang at gmail.com
Fri Jan 30 12:41:49 CST 2009


Hi Luke,

On Fri, Jan 30, 2009 at 9:22 AM, Luke Kenneth Casson Leighton
<lkcl at lkcl.net> wrote:
> i've encountered some bugs (thanks to python again :) ) in the wine
> implementation of nt named pipes, and have raised it as a bug
> http://bugs.winehq.org/show_bug.cgi?id=17195 but it started getting
> complicated so i thought i'd best raise it here.
> the behaviour of nt named pipes is a cross between datagrams and
> streams - it's the best of both worlds:
> * absolute inviolate message sizes (datagrams)
> * absolute inviolate message order (streams).
> the issue with the implementation of nt named pipes on top of _just_
> streams (unix sockets) is this: two packets sent get blatted into one
> read.

You are correct.  We've known about that bug for ages, but never got
around to fixing it.  See e.g. Mike McCormack's interview and his
comments on message mode:
http://www.winehq.org/interview/7

> ... i'm veery tempted to say "can i have a go at implementing this?"
> but... i know it'll be ... how-to-say... eeenteresting :)
>
> should i try?

Yes, by all means.

> would an extra server message need to be added (for read), so that the
> server can keep track of how much data has been read back (of the
> current datagram)?

Possibly.  This is tricky too, because a named pipe handle can be
shared across processes.  You really want named pipe reads to block
until a complete datagram is available.  What to do with short reads
is something you'd have to figure out too.  Some nice C test cases
would go a long way toward a correct implementation.
--Juan



More information about the wine-devel mailing list