duplex
duplex copied to clipboard
The Duplex trait: interactive streams
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 Files 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.