Module mio::windows
[−]
[src]
Windows-only extensions to the mio crate.
Mio on windows is currently implemented with IOCP for a high-performance
implementation of asynchronous I/O. Mio then provides TCP and UDP as sample
bindings for the system to connect networking types to asynchronous I/O. On
Unix this scheme is then also extensible to all other file descriptors with
the EventedFd
type, but on Windows no such analog is available. The
purpose of this module, however, is to similarly provide a mechanism for
foreign I/O types to get hooked up into the IOCP event loop.
This module provides two types for interfacing with a custom IOCP handle:
Binding
- this type is intended to govern binding with mio'sPoll
type. Each I/O object should contain an instance ofBinding
that's interfaced with for the implementation of theEvented
trait. Theregister
,reregister
, andderegister
methods for theEvented
trait all have rough analogs withBinding
.Note that this type does not handle readiness. That is, this type does not handle whether sockets are readable/writable/etc. It's intended that IOCP types will internally manage this state with a
SetReadiness
type from thepoll
module. TheSetReadiness
is typically lazily created on the first time thatEvented::register
is called and then stored in the I/O object.Also note that for types which represent streams of bytes the mio interface of readiness doesn't map directly to the Windows model of completion. This means that types will have to perform internal buffering to ensure that a readiness interface can be provided. For a sample implementation see the TCP/UDP modules in mio itself.
Overlapped
- this type is intended to be used as the concreate instances of theOVERLAPPED
type that most win32 methods expect. It's crucial, for safety, that all asynchronous operations are initiated with an instance ofOverlapped
and not another instantiation ofOVERLAPPED
.Mio's
Overlapped
type is created with a function pointer that receives aOVERLAPPED_ENTRY
type when called. ThisOVERLAPPED_ENTRY
type is defined in thewinapi
crate. Whenever a completion is posted to an IOCP object theOVERLAPPED
that was signaled will be interpreted asOverlapped
in the mio crate and this function pointer will be invoked. Through this function pointer, and through theOVERLAPPED
pointer, implementations can handle management of I/O events.
When put together these two types enable custom Windows handles to be
registered with mio's event loops. The Binding
type is used to associate
handles and the Overlapped
type is used to execute I/O operations. When
the I/O operations are completed a custom function pointer is called which
typically modifies a SetReadiness
set by Evented
methods which will get
later hooked into the mio event loop.
Structs
Binding |
A |
Overlapped |
A wrapper around an internal instance over |