Windows named pipes bindings for mio.
This crate implements bindings for named pipes for the mio crate. This crate compiles on all platforms but only contains anything on Windows. Currently this crate requires mio 0.6.2.
On Windows, mio is implemented with an IOCP object at the heart of its
Poll implementation. For named pipes, this means that all I/O is done in
an overlapped fashion and the named pipes themselves are registered with
mio's internal IOCP object. Essentially, this crate is using IOCP for
bindings with named pipes.
Note, though, that IOCP is a completion based model whereas mio expects a readiness based model. As a result this crate, like with TCP objects in mio, has internal buffering to translate the completion model to a readiness model. This means that this crate is not a zero-cost binding over named pipes on Windows, but rather approximates the performance of mio's TCP implementation on Windows.
Write traits are implemented for
NamedPipe and for
&NamedPipe. This represents that a named pipe can be concurrently read and
written to and also can be read and written to at all. Typically a named
pipe needs to be connected to a client before it can be read or written,
Note that for I/O operations on a named pipe to succeed then the named pipe needs to be associated with an event loop. Until this happens all I/O operations will return a "would block" error.
NamedPipe type supports a
connect method to connect to a client and
disconnect method to disconnect from that client. These two methods only
work once a named pipe is associated with an event loop.
connect method will succeed asynchronously and a completion can be
detected once the object receives a writable notification.
Currently to create a client of a named pipe server then you can use the
OpenOptions type in the standard library to create a
File that connects
to a named pipe. Afterwards you can use the
into_raw_handle method coupled
NamedPipe::from_raw_handle method to convert that to a named pipe
that can operate asynchronously. Don't forget to pass the
FILE_FLAG_OVERLAPPED flag when opening the
Representation of a named pipe on Windows.