pub struct PollEvented<E> { /* private fields */ }
Expand description
A concrete implementation of a stream of readiness notifications for I/O objects that originates from an event loop.
Created by the PollEvented::new
method, each PollEvented
is
associated with a specific event loop and source of events that will be
registered with an event loop.
An instance of PollEvented
is essentially the bridge between the mio
world and the tokio-core
world, providing abstractions to receive
notifications about changes to an object’s mio::Ready
state.
Each readiness stream has a number of methods to test whether the underlying
object is readable or writable. Once the methods return that an object is
readable/writable, then it will continue to do so until the need_read
or
need_write
methods are called.
That is, this object is typically wrapped in another form of I/O object. It’s the responsibility of the wrapper to inform the readiness stream when a “would block” I/O event is seen. The readiness stream will then take care of any scheduling necessary to get notified when the event is ready again.
You can find more information about creating a custom I/O object online.
§Readiness to read/write
A PollEvented
allows listening and waiting for an arbitrary mio::Ready
instance, including the platform-specific contents of mio::Ready
. At most
two future tasks, however, can be waiting on a PollEvented
. The
need_read
and need_write
methods can block two separate tasks, one on
reading and one on writing. Not all I/O events correspond to read/write,
however!
To account for this a PollEvented
gets a little interesting when working
with an arbitrary instance of mio::Ready
that may not map precisely to
“write” and “read” tasks. Currently it is defined that instances of
mio::Ready
that do not return true from is_writable
are all notified
through need_read
, or the read task.
In other words, poll_ready
with the mio::UnixReady::hup
event will block
the read task of this PollEvented
if the hup
event isn’t available.
Essentially a good rule of thumb is that if you’re using the poll_ready
method you want to also use need_read
to signal blocking and you should
otherwise probably avoid using two tasks on the same PollEvented
.
Implementations§
Source§impl<E: Evented> PollEvented<E>
impl<E: Evented> PollEvented<E>
Sourcepub fn new(io: E, handle: &Handle) -> Result<PollEvented<E>>
pub fn new(io: E, handle: &Handle) -> Result<PollEvented<E>>
Creates a new readiness stream associated with the provided
loop_handle
and for the given source
.
This method returns a future which will resolve to the readiness stream when it’s ready.
Sourcepub fn deregister(self, _: &Handle) -> Result<()>
pub fn deregister(self, _: &Handle) -> Result<()>
Deregisters this source of events from the reactor core specified.
This method can optionally be called to unregister the underlying I/O
object with the event loop that the handle
provided points to.
Typically this method is not required as this automatically happens when
E
is dropped, but for some use cases the E
object doesn’t represent
an owned reference, so dropping it won’t automatically unregister with
the event loop.
This consumes self
as it will no longer provide events after the
method is called, and will likely return an error if this PollEvented
was created on a separate event loop from the handle
specified.
Source§impl<E> PollEvented<E>
impl<E> PollEvented<E>
Sourcepub fn poll_read(&self) -> Async<()>
pub fn poll_read(&self) -> Async<()>
Tests to see if this source is ready to be read from or not.
If this stream is not ready for a read then NotReady
will be returned
and the current task will be scheduled to receive a notification when
the stream is readable again. In other words, this method is only safe
to call from within the context of a future’s task, typically done in a
Future::poll
method.
This is mostly equivalent to self.poll_ready(Ready::readable())
.
§Panics
This function will panic if called outside the context of a future’s task.
Sourcepub fn poll_write(&self) -> Async<()>
pub fn poll_write(&self) -> Async<()>
Tests to see if this source is ready to be written to or not.
If this stream is not ready for a write then NotReady
will be returned
and the current task will be scheduled to receive a notification when
the stream is writable again. In other words, this method is only safe
to call from within the context of a future’s task, typically done in a
Future::poll
method.
This is mostly equivalent to self.poll_ready(Ready::writable())
.
§Panics
This function will panic if called outside the context of a future’s task.
Sourcepub fn poll_ready(&self, mask: Ready) -> Async<Ready>
pub fn poll_ready(&self, mask: Ready) -> Async<Ready>
Test to see whether this source fulfills any condition listed in mask
provided.
The mask
given here is a mio Ready
set of possible events. This can
contain any events like read/write but also platform-specific events
such as hup and error. The mask
indicates events that are interested
in being ready.
If any event in mask
is ready then it is returned through
Async::Ready
. The Ready
set returned is guaranteed to not be empty
and contains all events that are currently ready in the mask
provided.
If no events are ready in the mask
provided then the current task is
scheduled to receive a notification when any of them become ready. If
the writable
event is contained within mask
then this
PollEvented
’s write
task will be blocked and otherwise the read
task will be blocked. This is generally only relevant if you’re working
with this PollEvented
object on multiple tasks.
§Panics
This function will panic if called outside the context of a future’s task.
Sourcepub fn need_read(&self)
pub fn need_read(&self)
Indicates to this source of events that the corresponding I/O object is no longer readable, but it needs to be.
This function, like poll_read
, is only safe to call from the context
of a future’s task (typically in a Future::poll
implementation). It
informs this readiness stream that the underlying object is no longer
readable, typically because a “would block” error was seen.
All readiness bits associated with this stream except the writable bit will be reset when this method is called. The current task is then scheduled to receive a notification whenever anything changes other than the writable bit. Note that this typically just means the readable bit is used here, but if you’re using a custom I/O object for events like hup/error this may also be relevant.
Note that it is also only valid to call this method if poll_read
previously indicated that the object is readable. That is, this function
must always be paired with calls to poll_read
previously.
§Panics
This function will panic if called outside the context of a future’s task.
Sourcepub fn need_write(&self)
pub fn need_write(&self)
Indicates to this source of events that the corresponding I/O object is no longer writable, but it needs to be.
This function, like poll_write
, is only safe to call from the context
of a future’s task (typically in a Future::poll
implementation). It
informs this readiness stream that the underlying object is no longer
writable, typically because a “would block” error was seen.
The flag indicating that this stream is writable is unset and the current task is scheduled to receive a notification when the stream is then again writable.
Note that it is also only valid to call this method if poll_write
previously indicated that the object is writable. That is, this function
must always be paired with calls to poll_write
previously.
§Panics
This function will panic if called outside the context of a future’s task.
Sourcepub fn remote(&self) -> &Remote
pub fn remote(&self) -> &Remote
Returns a reference to the event loop handle that this readiness stream is associated with.
Trait Implementations§
Source§impl<'a, E> AsyncRead for &'a PollEvented<E>
impl<'a, E> AsyncRead for &'a PollEvented<E>
Source§unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool
unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool
read
. Returns
true
if the supplied buffer was zeroed out. Read moreSource§fn read_buf<B>(&mut self, buf: &mut B) -> Result<Async<usize>, Error>
fn read_buf<B>(&mut self, buf: &mut B) -> Result<Async<usize>, Error>
BufMut
, returning
how many bytes were read. Read moreSource§impl<E: Read> AsyncRead for PollEvented<E>
impl<E: Read> AsyncRead for PollEvented<E>
Source§unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool
unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool
read
. Returns
true
if the supplied buffer was zeroed out. Read moreSource§fn read_buf<B>(&mut self, buf: &mut B) -> Result<Async<usize>, Error>
fn read_buf<B>(&mut self, buf: &mut B) -> Result<Async<usize>, Error>
BufMut
, returning
how many bytes were read. Read moreSource§impl<'a, E> AsyncWrite for &'a PollEvented<E>
impl<'a, E> AsyncWrite for &'a PollEvented<E>
Source§fn shutdown(&mut self) -> Poll<(), Error>
fn shutdown(&mut self) -> Poll<(), Error>
Source§fn poll_write(&mut self, buf: &[u8]) -> Result<Async<usize>, Error>
fn poll_write(&mut self, buf: &[u8]) -> Result<Async<usize>, Error>
buf
into the object. Read moreSource§impl<E: Write> AsyncWrite for PollEvented<E>
impl<E: Write> AsyncWrite for PollEvented<E>
Source§fn shutdown(&mut self) -> Poll<(), Error>
fn shutdown(&mut self) -> Poll<(), Error>
Source§fn poll_write(&mut self, buf: &[u8]) -> Result<Async<usize>, Error>
fn poll_write(&mut self, buf: &[u8]) -> Result<Async<usize>, Error>
buf
into the object. Read moreSource§impl<'a, E> Read for &'a PollEvented<E>
impl<'a, E> Read for &'a PollEvented<E>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read moreSource§impl<E: Read> Read for PollEvented<E>
impl<E: Read> Read for PollEvented<E>
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read moreSource§impl<'a, E> Write for &'a PollEvented<E>
impl<'a, E> Write for &'a PollEvented<E>
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)Source§impl<E: Write> Write for PollEvented<E>
impl<E: Write> Write for PollEvented<E>
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)Auto Trait Implementations§
impl<E> !Freeze for PollEvented<E>
impl<E> !RefUnwindSafe for PollEvented<E>
impl<E> Send for PollEvented<E>where
E: Send,
impl<E> Sync for PollEvented<E>where
E: Sync,
impl<E> Unpin for PollEvented<E>where
E: Unpin,
impl<E> !UnwindSafe for PollEvented<E>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<R> ReadBytesExt for R
impl<R> ReadBytesExt for R
Source§fn read_u8(&mut self) -> Result<u8, Error>
fn read_u8(&mut self) -> Result<u8, Error>
Source§fn read_i8(&mut self) -> Result<i8, Error>
fn read_i8(&mut self) -> Result<i8, Error>
Source§fn read_u16<T>(&mut self) -> Result<u16, Error>where
T: ByteOrder,
fn read_u16<T>(&mut self) -> Result<u16, Error>where
T: ByteOrder,
Source§fn read_i16<T>(&mut self) -> Result<i16, Error>where
T: ByteOrder,
fn read_i16<T>(&mut self) -> Result<i16, Error>where
T: ByteOrder,
Source§fn read_u24<T>(&mut self) -> Result<u32, Error>where
T: ByteOrder,
fn read_u24<T>(&mut self) -> Result<u32, Error>where
T: ByteOrder,
Source§fn read_i24<T>(&mut self) -> Result<i32, Error>where
T: ByteOrder,
fn read_i24<T>(&mut self) -> Result<i32, Error>where
T: ByteOrder,
Source§fn read_u32<T>(&mut self) -> Result<u32, Error>where
T: ByteOrder,
fn read_u32<T>(&mut self) -> Result<u32, Error>where
T: ByteOrder,
Source§fn read_i32<T>(&mut self) -> Result<i32, Error>where
T: ByteOrder,
fn read_i32<T>(&mut self) -> Result<i32, Error>where
T: ByteOrder,
Source§fn read_u48<T>(&mut self) -> Result<u64, Error>where
T: ByteOrder,
fn read_u48<T>(&mut self) -> Result<u64, Error>where
T: ByteOrder,
Source§fn read_i48<T>(&mut self) -> Result<i64, Error>where
T: ByteOrder,
fn read_i48<T>(&mut self) -> Result<i64, Error>where
T: ByteOrder,
Source§fn read_u64<T>(&mut self) -> Result<u64, Error>where
T: ByteOrder,
fn read_u64<T>(&mut self) -> Result<u64, Error>where
T: ByteOrder,
Source§fn read_i64<T>(&mut self) -> Result<i64, Error>where
T: ByteOrder,
fn read_i64<T>(&mut self) -> Result<i64, Error>where
T: ByteOrder,
Source§fn read_u128<T>(&mut self) -> Result<u128, Error>where
T: ByteOrder,
fn read_u128<T>(&mut self) -> Result<u128, Error>where
T: ByteOrder,
Source§fn read_i128<T>(&mut self) -> Result<i128, Error>where
T: ByteOrder,
fn read_i128<T>(&mut self) -> Result<i128, Error>where
T: ByteOrder,
Source§fn read_uint<T>(&mut self, nbytes: usize) -> Result<u64, Error>where
T: ByteOrder,
fn read_uint<T>(&mut self, nbytes: usize) -> Result<u64, Error>where
T: ByteOrder,
Source§fn read_int<T>(&mut self, nbytes: usize) -> Result<i64, Error>where
T: ByteOrder,
fn read_int<T>(&mut self, nbytes: usize) -> Result<i64, Error>where
T: ByteOrder,
Source§fn read_uint128<T>(&mut self, nbytes: usize) -> Result<u128, Error>where
T: ByteOrder,
fn read_uint128<T>(&mut self, nbytes: usize) -> Result<u128, Error>where
T: ByteOrder,
Source§fn read_int128<T>(&mut self, nbytes: usize) -> Result<i128, Error>where
T: ByteOrder,
fn read_int128<T>(&mut self, nbytes: usize) -> Result<i128, Error>where
T: ByteOrder,
Source§fn read_f32<T>(&mut self) -> Result<f32, Error>where
T: ByteOrder,
fn read_f32<T>(&mut self) -> Result<f32, Error>where
T: ByteOrder,
Source§fn read_f64<T>(&mut self) -> Result<f64, Error>where
T: ByteOrder,
fn read_f64<T>(&mut self) -> Result<f64, Error>where
T: ByteOrder,
Source§fn read_u16_into<T>(&mut self, dst: &mut [u16]) -> Result<(), Error>where
T: ByteOrder,
fn read_u16_into<T>(&mut self, dst: &mut [u16]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_u32_into<T>(&mut self, dst: &mut [u32]) -> Result<(), Error>where
T: ByteOrder,
fn read_u32_into<T>(&mut self, dst: &mut [u32]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_u64_into<T>(&mut self, dst: &mut [u64]) -> Result<(), Error>where
T: ByteOrder,
fn read_u64_into<T>(&mut self, dst: &mut [u64]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_u128_into<T>(&mut self, dst: &mut [u128]) -> Result<(), Error>where
T: ByteOrder,
fn read_u128_into<T>(&mut self, dst: &mut [u128]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_i8_into(&mut self, dst: &mut [i8]) -> Result<(), Error>
fn read_i8_into(&mut self, dst: &mut [i8]) -> Result<(), Error>
Source§fn read_i16_into<T>(&mut self, dst: &mut [i16]) -> Result<(), Error>where
T: ByteOrder,
fn read_i16_into<T>(&mut self, dst: &mut [i16]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_i32_into<T>(&mut self, dst: &mut [i32]) -> Result<(), Error>where
T: ByteOrder,
fn read_i32_into<T>(&mut self, dst: &mut [i32]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_i64_into<T>(&mut self, dst: &mut [i64]) -> Result<(), Error>where
T: ByteOrder,
fn read_i64_into<T>(&mut self, dst: &mut [i64]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_i128_into<T>(&mut self, dst: &mut [i128]) -> Result<(), Error>where
T: ByteOrder,
fn read_i128_into<T>(&mut self, dst: &mut [i128]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_f32_into<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where
T: ByteOrder,
fn read_f32_into<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where
T: ByteOrder,
Source§fn read_f32_into_unchecked<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where
T: ByteOrder,
fn read_f32_into_unchecked<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where
T: ByteOrder,
read_f32_into
instead