Struct tokio::runtime::io::registration::Registration
source · pub(crate) struct Registration {
handle: Handle,
shared: Arc<ScheduledIo>,
}
Expand description
Associates an I/O resource with the reactor instance that drives it.
A registration represents an I/O resource registered with a Reactor such that it will receive task notifications on readiness. This is the lowest level API for integrating with a reactor.
The association between an I/O resource is made by calling
new_with_interest_and_handle
.
Once the association is established, it remains established until the
registration instance is dropped.
A registration instance represents two separate readiness streams. One for the read readiness and one for write readiness. These streams are independent and can be consumed from separate tasks.
Note: while Registration
is Sync
, the caller must ensure that
there are at most two tasks that use a registration instance
concurrently. One task for poll_read_ready
and one task for
poll_write_ready
. While violating this requirement is “safe” from a
Rust memory safety point of view, it will result in unexpected behavior
in the form of lost notifications and tasks hanging.
§Platform-specific events
Registration
also allows receiving platform-specific mio::Ready
events. These events are included as part of the read readiness event
stream. The write readiness event stream is only for Ready::writable()
events.
Fields§
§handle: Handle
Handle to the associated runtime.
TODO: this can probably be moved into ScheduledIo
.
Reference to state stored by the driver.
Implementations§
source§impl Registration
impl Registration
sourcepub(crate) fn new_with_interest_and_handle(
io: &mut impl Source,
interest: Interest,
handle: Handle,
) -> Result<Registration>
pub(crate) fn new_with_interest_and_handle( io: &mut impl Source, interest: Interest, handle: Handle, ) -> Result<Registration>
Registers the I/O resource with the reactor for the provided handle, for
a specific Interest
. This does not add hup
or error
so if you are
interested in those states, you will need to add them to the readiness
state passed to this function.
§Return
Ok
if the registration happened successfullyErr
if an error was encountered during registration
sourcepub(crate) fn deregister(&mut self, io: &mut impl Source) -> Result<()>
pub(crate) fn deregister(&mut self, io: &mut impl Source) -> Result<()>
Deregisters the I/O resource from the reactor it is associated with.
This function must be called before the I/O resource associated with the registration is dropped.
Note that deregistering does not guarantee that the I/O resource can be registered with a different reactor. Some I/O resource types can only be associated with a single reactor instance for their lifetime.
§Return
If the deregistration was successful, Ok
is returned. Any calls to
Reactor::turn
that happen after a successful call to deregister
will
no longer result in notifications getting sent for this registration.
Err
is returned if an error is encountered.
pub(crate) fn clear_readiness(&self, event: ReadyEvent)
pub(crate) fn poll_read_ready( &self, cx: &mut Context<'_>, ) -> Poll<Result<ReadyEvent>>
pub(crate) fn poll_write_ready( &self, cx: &mut Context<'_>, ) -> Poll<Result<ReadyEvent>>
pub(crate) fn poll_read_io<R>( &self, cx: &mut Context<'_>, f: impl FnMut() -> Result<R>, ) -> Poll<Result<R>>
pub(crate) fn poll_write_io<R>( &self, cx: &mut Context<'_>, f: impl FnMut() -> Result<R>, ) -> Poll<Result<R>>
sourcefn poll_ready(
&self,
cx: &mut Context<'_>,
direction: Direction,
) -> Poll<Result<ReadyEvent>>
fn poll_ready( &self, cx: &mut Context<'_>, direction: Direction, ) -> Poll<Result<ReadyEvent>>
Polls for events on the I/O resource’s direction
readiness stream.
If called with a task context, notify the task when a new event is received.