[−][src]Crate async_dup
Duplicate an async I/O handle.
This crate provides two tools, Arc
and Mutex
:
Arc
implementsAsyncRead
,AsyncWrite
, andAsyncSeek
if a reference to the inner type does.- A reference to
Mutex
implementsAsyncRead
,AsyncWrite
, andAsyncSeek
if the inner type does.
Wrap an async I/O handle in Arc
or Mutex
to clone it or share among tasks.
Examples
Clone an async I/O handle:
use async_dup::Arc; use futures::io; use smol::Async; use std::net::TcpStream; // A client that echoes messages back to the server. let stream = Async::<TcpStream>::connect("127.0.0.1:8000").await?; // Create two handles to the stream. let reader = Arc::new(stream); let mut writer = reader.clone(); // Echo data received from the reader back into the writer. io::copy(reader, &mut writer).await?;
Share an async I/O handle:
use async_dup::Mutex; use futures::io; use futures::prelude::*; // Reads data from a stream and echoes it back. async fn echo(stream: impl AsyncRead + AsyncWrite + Unpin) -> io::Result<u64> { let stream = Mutex::new(stream); io::copy(&stream, &mut &stream).await }
Structs
Arc | A reference-counted pointer that implements async I/O traits. |
Mutex | A mutex that implements async I/O traits. |
MutexGuard | A guard that releases the mutex when dropped. |