Trait tokio::io::AsyncRead[][src]

pub trait AsyncRead {
    fn poll_read(
        self: Pin<&mut Self>,
        cx: &mut Context<'_>,
        buf: &mut ReadBuf<'_>
    ) -> Poll<Result<()>>; }
Expand description

Reads bytes from a source.

This trait is analogous to the std::io::Read trait, but integrates with the asynchronous task system. In particular, the poll_read method, unlike Read::read, will automatically queue the current task for wakeup and return if data is not yet available, rather than blocking the calling thread.

Specifically, this means that the poll_read function will return one of the following:

  • Poll::Ready(Ok(())) means that data was immediately read and placed into the output buffer. The amount of data read can be determined by the increase in the length of the slice returned by ReadBuf::filled. If the difference is 0, EOF has been reached.

  • Poll::Pending means that no data was read into the buffer provided. The I/O object is not currently readable but may become readable in the future. Most importantly, the current future’s task is scheduled to get unparked when the object is readable. This means that like Future::poll you’ll receive a notification when the I/O object is readable again.

  • Poll::Ready(Err(e)) for other errors are standard I/O errors coming from the underlying object.

This trait importantly means that the read method only works in the context of a future’s task. The object may panic if used outside of a task.

Utilities for working with AsyncRead values are provided by AsyncReadExt.

Required methods

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

Expand description

Attempts to read from the AsyncRead into buf.

On success, returns Poll::Ready(Ok(())) and places data in the unfilled portion of buf. If no data was read (buf.filled().len() is unchanged), it implies that EOF has been reached.

If no data is available for reading, the method returns Poll::Pending and arranges for the current task (via cx.waker()) to receive a notification when the object becomes readable or is closed.

Loading content...

Implementations on Foreign Types

impl<T: ?Sized + AsyncRead + Unpin> AsyncRead for Box<T>[src]

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<T: ?Sized + AsyncRead + Unpin> AsyncRead for &mut T[src]

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<P> AsyncRead for Pin<P> where
    P: DerefMut + Unpin,
    P::Target: AsyncRead
[src]

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for &[u8][src]

fn poll_read(
    self: Pin<&mut Self>,
    _cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<T: AsRef<[u8]> + Unpin> AsyncRead for Cursor<T>[src]

fn poll_read(
    self: Pin<&mut Self>,
    _cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

Loading content...

Implementors

impl AsyncRead for File[src]

This is supported on crate feature fs only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    dst: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for TcpStream[src]

This is supported on crate feature net only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for UnixStream[src]

This is supported on crate feature net only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for tokio::net::tcp::OwnedReadHalf[src]

This is supported on crate feature net only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for tokio::net::tcp::ReadHalf<'_>[src]

This is supported on crate feature net only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for tokio::net::unix::OwnedReadHalf[src]

This is supported on crate feature net only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for tokio::net::unix::ReadHalf<'_>[src]

This is supported on crate feature net only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for ChildStderr[src]

This is supported on crate feature process only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for ChildStdout[src]

This is supported on crate feature process only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for DuplexStream[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for Empty[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    _: &mut Context<'_>,
    _: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for Repeat[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    _: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl AsyncRead for Stdin[src]

This is supported on crate feature io-std only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<R: AsyncRead> AsyncRead for BufReader<R>[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<R: AsyncRead> AsyncRead for Take<R>[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<(), Error>>
[src]

impl<RW: AsyncRead + AsyncWrite> AsyncRead for BufStream<RW>[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<T: AsyncRead> AsyncRead for tokio::io::ReadHalf<T>[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

impl<W: AsyncWrite + AsyncRead> AsyncRead for BufWriter<W>[src]

This is supported on crate feature io-util only.

fn poll_read(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    buf: &mut ReadBuf<'_>
) -> Poll<Result<()>>
[src]

Loading content...