Struct tokio::io::DuplexStream[][src]

pub struct DuplexStream { /* fields omitted */ }
This is supported on crate feature io-util only.
Expand description

A bidirectional pipe to read and write bytes in memory.

A pair of DuplexStreams are created together, and they act as a “channel” that can be used as in-memory IO types. Writing to one of the pairs will allow that data to be read from the other, and vice versa.

Closing a DuplexStream

If one end of the DuplexStream channel is dropped, any pending reads on the other side will continue to read data until the buffer is drained, then they will signal EOF by returning 0 bytes. Any writes to the other side, including pending ones (that are waiting for free space in the buffer) will return Err(BrokenPipe) immediately.

Example

let (mut client, mut server) = tokio::io::duplex(64);

client.write_all(b"ping").await?;

let mut buf = [0u8; 4];
server.read_exact(&mut buf).await?;
assert_eq!(&buf, b"ping");

server.write_all(b"pong").await?;

client.read_exact(&mut buf).await?;
assert_eq!(&buf, b"pong");

Trait Implementations

impl AsyncRead for DuplexStream[src]

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

Attempts to read from the AsyncRead into buf. Read more

impl AsyncWrite for DuplexStream[src]

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

Attempt to write bytes from buf into the object. Read more

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

Attempts to flush the object, ensuring that any buffered data reach their destination. Read more

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

Initiates or attempts to shut down this writer, returning success when the I/O connection has completely shut down. Read more

fn poll_write_vectored(
    self: Pin<&mut Self>,
    cx: &mut Context<'_>,
    bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>
[src]

Like poll_write, except that it writes from a slice of buffers. Read more

fn is_write_vectored(&self) -> bool[src]

Determines if this writer has an efficient poll_write_vectored implementation. Read more

impl Debug for DuplexStream[src]

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

Formats the value using the given formatter. Read more

impl Drop for DuplexStream[src]

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.