pub struct Registration { /* private fields */ }
io-driver
only.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
. 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.
Implementations§
Source§impl Registration
impl Registration
Sourcepub fn new<T>(io: &T) -> Result<Registration>where
T: Evented,
pub fn new<T>(io: &T) -> Result<Registration>where
T: Evented,
Register the I/O resource with the default reactor.
§Return
Ok
if the registration happened successfullyErr
if an error was encountered during registration
§Panics
This function panics if thread-local runtime is not set.
The runtime is usually set implicitly when this function is called
from a future driven by a tokio runtime, otherwise runtime can be set
explicitly with Handle::enter
function.
Sourcepub fn deregister<T>(&mut self, io: &T) -> Result<()>where
T: Evented,
pub fn deregister<T>(&mut self, io: &T) -> Result<()>where
T: Evented,
Deregister 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.
Sourcepub fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<Result<Ready>>
pub fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<Result<Ready>>
Poll for events on the I/O resource’s read readiness stream.
If the I/O resource receives a new read readiness event since the last
call to poll_read_ready
, it is returned. If it has not, the current
task is notified once a new event is received.
All events except HUP
are edge-triggered. Once HUP
is returned,
the function will always return Ready(HUP)
. This should be treated as
the end of the readiness stream.
Ensure that register
has been called first.
§Return value
There are several possible return values:
-
Poll::Ready(Ok(readiness))
means that the I/O resource has received a new readiness event. The readiness value is included. -
Poll::Pending
means that no new readiness events have been received since the last call topoll_read_ready
. -
Poll::Ready(Err(err))
means that the registration has encountered an error. This error either represents a permanent internal error or the fact thatregister
was not called first.
§Panics
This function will panic if called from outside of a task context.
Sourcepub fn take_read_ready(&self) -> Result<Option<Ready>>
pub fn take_read_ready(&self) -> Result<Option<Ready>>
Consume any pending read readiness event.
This function is identical to poll_read_ready
except that it
will not notify the current task when a new event is received. As such,
it is safe to call this function from outside of a task context.
Sourcepub fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<Result<Ready>>
pub fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<Result<Ready>>
Poll for events on the I/O resource’s write readiness stream.
If the I/O resource receives a new write readiness event since the last
call to poll_write_ready
, it is returned. If it has not, the current
task is notified once a new event is received.
All events except HUP
are edge-triggered. Once HUP
is returned,
the function will always return Ready(HUP)
. This should be treated as
the end of the readiness stream.
Ensure that register
has been called first.
§Return value
There are several possible return values:
-
Poll::Ready(Ok(readiness))
means that the I/O resource has received a new readiness event. The readiness value is included. -
Poll::Pending
means that no new readiness events have been received since the last call topoll_write_ready
. -
Poll::Ready(Err(err))
means that the registration has encountered an error. This error either represents a permanent internal error or the fact thatregister
was not called first.
§Panics
This function will panic if called from outside of a task context.
Sourcepub fn take_write_ready(&self) -> Result<Option<Ready>>
pub fn take_write_ready(&self) -> Result<Option<Ready>>
Consume any pending write readiness event.
This function is identical to poll_write_ready
except that it
will not notify the current task when a new event is received. As such,
it is safe to call this function from outside of a task context.