Read bytes asynchronously.
This trait inherits from
std::io::Read and indicates that an I/O object is
non-blocking. All non-blocking I/O objects must return an error when
bytes are unavailable instead of blocking the current thread.
Specifically, this means that the
poll_read function will return one of
nbytes of data was immediately read and placed into the output buffer, where
n== 0 implies that EOF has been reached.
Ok(Async::NotReady)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::pollyou'll receive a notification when the I/O object is readable again.
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.
unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool
Prepares an uninitialized buffer to be safe to pass to
true if the supplied buffer was zeroed out.
While it would be highly unusual, implementations of
able to read data from the buffer passed as an argument. Because of
this, the buffer passed to
io::Read must be initialized memory. In
situations where large numbers of buffers are used, constantly having to
zero out buffers can be expensive.
This function does any necessary work to prepare an uninitialized buffer
to be safe to pass to
read guarantees to never attempt to
read data out of the supplied buffer, then
doesn't need to do any work.
If this function returns
true, then the memory has been zeroed out.
This allows implementations of
AsyncRead which are composed of
multiple subimplementations to efficiently implement
This function isn't actually
unsafe to call but
unsafe to implement.
The implementer must ensure that either the whole
buf has been zeroed
read_buf() overwrites the buffer without reading it and returns
This function is called from
Attempt to read from the
On success, returns
If no data is available for reading, the method returns
Ok(Async::NotReady) and arranges for the current task (via
cx.waker()) to receive a notification when the object becomes
readable or is closed.
Pull some bytes from this source into the specified
how many bytes were read.
buf provided will have bytes read into it and the internal cursor
will be advanced if any bytes were read. Note that this method typically
will not reallocate the buffer provided.
fn framed<T: Encoder + Decoder>(self, codec: T) -> Framed<Self, T> where
Self: AsyncWrite + Sized,
Self: AsyncWrite + Sized,
Use tokio_codec::Decoder::framed instead
Sink interface for reading and writing to this
I/O object, using
Encode to read and write the raw data.
Raw I/O objects work with byte sequences, but higher-level code usually
wants to batch these into meaningful chunks, called "frames". This
method layers framing on top of an I/O object, by using the
traits to handle encoding and decoding of messages frames. Note that
the incoming and outgoing frame types may be distinct.
This function returns a single object that is both
Sink; grouping this into a single object is often useful for layering
things like gzip or TLS, which require both read and write access to the
If you want to work more directly with the streams and sink, consider
split on the
Framed returned by this method, which will
break them into separate objects, allowing them to interact more easily.
Helper method for splitting this read/write object into two halves.
The two halves returned implement the
To restore this read/write object from its
impl<T> AsyncRead for AllowStdIo<T> where[src]