Skip to main content

Connection

Trait Connection 

pub trait Connection:
    Clone
    + Debug
    + ExtensionsRef
    + Send
    + Sync
    + 'static {
    type SendStream: SendStream;
    type RecvStream: RecvStream;
    type CloseLease: Send + Sync + Unpin + 'static;

Show 23 methods // Required methods fn open_bi( &self, ) -> impl Future<Output = Result<(Self::SendStream, Self::RecvStream), ConnectionError>> + Send; fn open_uni( &self, ) -> impl Future<Output = Result<Self::SendStream, ConnectionError>> + Send; fn accept_bi( &self, ) -> impl Future<Output = Result<(Self::SendStream, Self::RecvStream), ConnectionError>> + Send; fn accept_uni( &self, ) -> impl Future<Output = Result<Self::RecvStream, ConnectionError>> + Send; fn side(&self) -> Side; fn handshake_confirmed( &self, ) -> impl Future<Output = Result<(), ConnectionError>> + Send; fn is_handshake_confirmed(&self) -> bool; fn close(&self, error_code: VarInt, reason: &[u8]); fn closed(&self) -> impl Future<Output = ConnectionError> + Send; fn close_reason(&self) -> Option<ConnectionError>; fn available_streams(&self, dir: Dir) -> u64; fn max_concurrent_streams(&self, dir: Dir) -> u64; fn remote_stream_limit(&self, dir: Dir) -> u64; fn local_stream_limit(&self, dir: Dir) -> u64; fn early_data(&self) -> EarlyData; fn qlog_control(&self) -> Option<ConnectionQlogControl>; fn read_datagram( &self, ) -> impl Future<Output = Result<Bytes, ConnectionError>> + Send; fn max_datagram_size(&self) -> Option<usize>; fn datagram_receive_enabled(&self) -> bool; fn received_datagrams(&self) -> usize; fn datagram_send_ready( &self, ) -> impl Future<Output = ()> + Send + 'static + use<Self>; fn close_lease(&self) -> Self::CloseLease; fn rtt(&self) -> Duration;
}
Available on crate features http-backend and http and std only.
Expand description

A QUIC connection carrying HTTP/3.

Clones share one connection and its live extensions. h3 races opens and accepts in select!, so dropping a pending one must not lose stream credit or an incoming stream.

Required Associated Types§

Required Methods§

fn open_bi( &self, ) -> impl Future<Output = Result<(Self::SendStream, Self::RecvStream), ConnectionError>> + Send

fn open_uni( &self, ) -> impl Future<Output = Result<Self::SendStream, ConnectionError>> + Send

fn accept_bi( &self, ) -> impl Future<Output = Result<(Self::SendStream, Self::RecvStream), ConnectionError>> + Send

Accept the next peer-initiated bidirectional stream. Queued incoming streams remain available after connection closure, before the terminal error.

fn accept_uni( &self, ) -> impl Future<Output = Result<Self::RecvStream, ConnectionError>> + Send

Accept the next peer-initiated unidirectional stream. Queued incoming streams remain available after connection closure, before the terminal error, so HTTP/3 can drain buffered control and QPACK data.

fn side(&self) -> Side

Which stream IDs are locally initiated. Must match the IDs the streams report.

fn handshake_confirmed( &self, ) -> impl Future<Output = Result<(), ConnectionError>> + Send

Application data can be sent without 0-RTT replay risk. Before resolving successfully, publish the negotiated Config::application_protocol in NegotiatedTlsParameters in the shared extensions.

fn is_handshake_confirmed(&self) -> bool

Whether Self::handshake_confirmed resolved successfully; stays true after closing.

fn close(&self, error_code: VarInt, reason: &[u8])

fn closed(&self) -> impl Future<Output = ConnectionError> + Send

fn close_reason(&self) -> Option<ConnectionError>

fn available_streams(&self, dir: Dir) -> u64

Locally initiated streams that can be opened now.

fn max_concurrent_streams(&self, dir: Dir) -> u64

Streams this endpoint allows the peer to have open at once.

fn remote_stream_limit(&self, dir: Dir) -> u64

Cumulative count of streams this endpoint allows the peer to open.

fn local_stream_limit(&self, dir: Dir) -> u64

Cumulative count of streams the peer allows this endpoint to open.

fn early_data(&self) -> EarlyData

Where this client’s early data stands.

fn qlog_control(&self) -> Option<ConnectionQlogControl>

The qlog sink HTTP/3 events are written to.

fn read_datagram( &self, ) -> impl Future<Output = Result<Bytes, ConnectionError>> + Send

Receive the next QUIC DATAGRAM payload. Dropping a pending future must not discard a datagram; HTTP/3 selects this future alongside other connection work.

fn max_datagram_size(&self) -> Option<usize>

fn datagram_receive_enabled(&self) -> bool

The peer may send QUIC DATAGRAM frames to this endpoint.

fn received_datagrams(&self) -> usize

Datagrams received and not yet taken by Self::read_datagram.

fn datagram_send_ready( &self, ) -> impl Future<Output = ()> + Send + 'static + use<Self>

Room on the datagram send queue, or the connection closed. Registered when called: create it before a send that may be refused as blocked and await it after the refusal.

fn close_lease(&self) -> Self::CloseLease

Holds off this connection’s close at a graceful shutdown until dropped, so a tunnel can still send what it carries.

fn rtt(&self) -> Duration

Bounds how long a datagram waits for its request stream.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§