TAAFT
Free mode
100% free
Freemium
Free Trial
Deals

duplex

sunfishcode / duplex

The Duplex trait: interactive streams

19 2 Language: Rust Updated: 1y ago

README

duplex

The Duplex trait: interactive streams

Github Actions CI Status crates.io page docs.rs docs

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.

0 AIs selected
Clear selection
#
Name
Task