tokio_reactor

Struct Registration

Source
pub struct Registration { /* private fields */ }
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 register. Once the association is established, it remains established until the registration instance is dropped. Subsequent calls to register are no-ops.

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

Source

pub fn new() -> Registration

Create a new Registration.

This registration is not associated with a Reactor instance. Call register to establish the association.

Source

pub fn register<T>(&self, io: &T) -> Result<bool>
where T: Evented,

Register the I/O resource with the default reactor.

This function is safe to call concurrently and repeatedly. However, only the first call will establish the registration. Subsequent calls will be no-ops.

§Return

If the registration happened successfully, Ok(true) is returned.

If an I/O resource has previously been successfully registered, Ok(false) is returned.

If an error is encountered during registration, Err is returned.

Source

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.

Source

pub fn register_with<T>(&self, io: &T, handle: &Handle) -> Result<bool>
where T: Evented,

Register the I/O resource with the specified reactor.

This function is safe to call concurrently and repeatedly. However, only the first call will establish the registration. Subsequent calls will be no-ops.

If the registration happened successfully, Ok(true) is returned.

If an I/O resource has previously been successfully registered, Ok(false) is returned.

If an error is encountered during registration, Err is returned.

Source

pub fn poll_read_ready(&self) -> Poll<Ready, Error>

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:

  • Ok(Async::Ready(readiness)) means that the I/O resource has received a new readiness event. The readiness value is included.

  • Ok(NotReady) means that no new readiness events have been received since the last call to poll_read_ready.

  • Err(err) means that the registration has encountered an error. This error either represents a permanent internal error or the fact that register was not called first.

§Panics

This function will panic if called from outside of a task context.

Source

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.

Source

pub fn poll_write_ready(&self) -> Poll<Ready, Error>

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:

  • Ok(Async::Ready(readiness)) means that the I/O resource has received a new readiness event. The readiness value is included.

  • Ok(NotReady) means that no new readiness events have been received since the last call to poll_write_ready.

  • Err(err) means that the registration has encountered an error. This error either represents a permanent internal error or the fact that register was not called first.

§Panics

This function will panic if called from outside of a task context.

Source

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.

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 Send for Registration

Source§

impl Sync for Registration

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where 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 T
where 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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.