Struct tokio::io::DuplexStream [−][src]
pub struct DuplexStream { /* fields omitted */ }
A bidirectional pipe to read and write bytes in memory.
A pair of DuplexStream
s 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]
impl AsyncRead for DuplexStream
[src]impl AsyncWrite for DuplexStream
[src]
impl AsyncWrite for DuplexStream
[src]fn poll_write(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8]
) -> Poll<Result<usize>>
[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8]
) -> Poll<Result<usize>>
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
[src]
fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>
[src]
fn poll_write_vectored(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>
[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &[IoSlice<'_>]
) -> Poll<Result<usize, Error>>
fn is_write_vectored(&self) -> bool
[src]
impl Drop for DuplexStream
[src]
impl Drop for DuplexStream
[src]