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'sPolltype. Each I/O object should contain an instance ofBindingthat's interfaced with for the implementation of theEventedtrait. Theregister,reregister, andderegistermethods for theEventedtrait 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
SetReadinesstype from thepollmodule. TheSetReadinessis typically lazily created on the first time thatEvented::registeris 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 concrete instances of theOVERLAPPEDtype that most win32 methods expect. It's crucial, for safety, that all asynchronous operations are initiated with an instance ofOverlappedand not another instantiation ofOVERLAPPED.Mio's
Overlappedtype is created with a function pointer that receives aOVERLAPPED_ENTRYtype when called. ThisOVERLAPPED_ENTRYtype is defined in thewinapicrate. Whenever a completion is posted to an IOCP object theOVERLAPPEDthat was signaled will be interpreted asOverlappedin the mio crate and this function pointer will be invoked. Through this function pointer, and through theOVERLAPPEDpointer, 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 |