This crate defines the Duplex
trait, for types that have logically
independent input and output channels.
The Read
and Write
traits take their streams by &mut self
and block,
so they cannot be used on the same stream simultaneously. This crate provides
and implements the HalfDuplex
trait for any type which implements
Duplex
, Read
, and Write
.
The AsyncRead
and AsyncWrite
traits take their streams by &mut self
but do not block, so they can be used on the same stream simultaneously, at
least when they're connected to an endpoint which supports it. When the
"futures-io" feature is enabled, this crate provides and implements the
FullDuplex
trait for any type which implements Duplex
, AsyncRead
,
and AsyncWrite
.
Tokio uses its own AsyncRead
, and AsyncWrite
. When the "tokio" feature is
enabled, this crate also provides and implements TokioFullDuplex
for any
type which implements Duplex
, tokio::io::AsyncRead
, and
tokio::io::AsyncWrite
.
Normal File
s are not duplex devices, because even though they support input
and output, the input and output are not logically independent since they share
a current-position pointer in the OS. Character devices are often unified with
files in OS APIs, however they may represent duplex devices. So while File
does not implement Duplex
, CharDevice
does.
The following are some notable types for which Duplex
is implemented:
Type | cfg |
Notes |
---|---|---|
std::net::TcpStream |
||
io_streams::StreamDuplexer |
||
nameless::DuplexByteStream |
||
nameless::DuplexTextStream |
||
char_device::CharDevice |
feature = char-device |
|
socketpair::SocketpairStream |
feature = socketpair |
|
ssh2::Stream |
feature = ssh2 |
|
ssh2::Channel |
feature = ssh2 |
|
serialport::TTYPort |
all(unix, feature = serialport) |
serialport dependencies |
readwrite::ReadWrite |
feature = readwrite |
|
duplexify::Duplexify |
feature = duplexify |
|
socket2::Socket |
feature = socket2 |
Support for async-std and tokio in char-device and socketpair is temporarily disabled until those crates contain the needed implementations of the I/O safety traits.