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.

§shared: Arc<ScheduledIo>

Reference to state stored by the driver.

Implementations§

source§

impl Registration

source

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 successfully
  • Err if an error was encountered during registration
source

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.

source

pub(crate) fn clear_readiness(&self, event: ReadyEvent)

source

pub(crate) fn poll_read_ready( &self, cx: &mut Context<'_> ) -> Poll<Result<ReadyEvent>>

source

pub(crate) fn poll_write_ready( &self, cx: &mut Context<'_> ) -> Poll<Result<ReadyEvent>>

source

pub(crate) fn poll_read_io<R>( &self, cx: &mut Context<'_>, f: impl FnMut() -> Result<R> ) -> Poll<Result<R>>

source

pub(crate) fn poll_write_io<R>( &self, cx: &mut Context<'_>, f: impl FnMut() -> Result<R> ) -> Poll<Result<R>>

source

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.

source

fn poll_io<R>( &self, cx: &mut Context<'_>, direction: Direction, f: impl FnMut() -> Result<R> ) -> Poll<Result<R>>

source

pub(crate) fn try_io<R>( &self, interest: Interest, f: impl FnOnce() -> Result<R> ) -> Result<R>

source

pub(crate) async fn readiness(&self, interest: Interest) -> Result<ReadyEvent>

source

pub(crate) async fn async_io<R>( &self, interest: Interest, f: impl FnMut() -> Result<R> ) -> Result<R>

source

fn handle(&self) -> &Handle

Trait Implementations§

source§

impl Debug for Registration

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for Registration

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl Send for Registration

source§

impl Sync for Registration

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.