pub trait NetStreamProvider<ADDR = SocketAddr>:
Clone
+ Send
+ Sync
+ 'static {
type Stream: AsyncRead + AsyncWrite + StreamOps + Send + Sync + Unpin + 'static;
type Listener: NetStreamListener<ADDR, Stream = Self::Stream> + Send + Sync + Unpin + 'static;
type ConnectOptions: Clone + Default + Send + Sync + Unpin + 'static;
type ListenOptions: Clone + Default + Send + Sync + Unpin + 'static;
// Required methods
fn connect<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
addr: &'life1 ADDR,
options: &'life2 Self::ConnectOptions,
) -> Pin<Box<dyn Future<Output = IoResult<Self::Stream>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn listen<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
addr: &'life1 ADDR,
options: &'life2 Self::ListenOptions,
) -> Pin<Box<dyn Future<Output = IoResult<Self::Listener>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
}Expand description
Trait for a runtime that can create and accept connections over network sockets.
(In Arti we use the AsyncRead and AsyncWrite traits from
futures::io as more standard, even though the ones from Tokio
can be a bit more efficient. Let’s hope that they converge in the
future.)
Required Associated Types§
Sourcetype Stream: AsyncRead + AsyncWrite + StreamOps + Send + Sync + Unpin + 'static
type Stream: AsyncRead + AsyncWrite + StreamOps + Send + Sync + Unpin + 'static
The type for the connections returned by Self::connect().
Sourcetype Listener: NetStreamListener<ADDR, Stream = Self::Stream> + Send + Sync + Unpin + 'static
type Listener: NetStreamListener<ADDR, Stream = Self::Stream> + Send + Sync + Unpin + 'static
The type for the listeners returned by Self::listen().
Sourcetype ConnectOptions: Clone + Default + Send + Sync + Unpin + 'static
type ConnectOptions: Clone + Default + Send + Sync + Unpin + 'static
The options that can be passed to Self::connect().
It can include options set with setsockopt,
as well as options that influence higher layers (eg, the runtime).
For connected streams,
you can use StreamOps to perform additional operations
or to configure additional options.
Sourcetype ListenOptions: Clone + Default + Send + Sync + Unpin + 'static
type ListenOptions: Clone + Default + Send + Sync + Unpin + 'static
The options that can be passed to Self::listen().
This includes both options that affect the listening, and options that will apply to any individual accepted connection streams.
It can include options set with setsockopt,
as well as options that influence higher layers (eg, the runtime).
For established streams that are accepted from a listener,
you can use StreamOps to perform additional operations
or to configure additional options.
Required Methods§
Sourcefn connect<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
addr: &'life1 ADDR,
options: &'life2 Self::ConnectOptions,
) -> Pin<Box<dyn Future<Output = IoResult<Self::Stream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn connect<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
addr: &'life1 ADDR,
options: &'life2 Self::ConnectOptions,
) -> Pin<Box<dyn Future<Output = IoResult<Self::Stream>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Launch a connection connection to a given socket address.
Note that unlike std::net:TcpStream::connect, we do not accept
any types other than a single ADDR. We do this because
we must be absolutely sure not to perform
unnecessary DNS lookups.
Sourcefn listen<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
addr: &'life1 ADDR,
options: &'life2 Self::ListenOptions,
) -> Pin<Box<dyn Future<Output = IoResult<Self::Listener>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn listen<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
addr: &'life1 ADDR,
options: &'life2 Self::ListenOptions,
) -> Pin<Box<dyn Future<Output = IoResult<Self::Listener>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Open a listener on a given socket address.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".