Struct Endpoint

Source
pub struct Endpoint {
    pub default_client_config: Option<ClientConfig>,
    /* private fields */
}
Expand description

A QUIC endpoint.

Fields§

§default_client_config: Option<ClientConfig>

The client configuration used by connect

Implementations§

Source§

impl Endpoint

Source

pub fn new( socket: UdpSocket, config: EndpointConfig, server_config: Option<ServerConfig>, default_client_config: Option<ClientConfig>, ) -> Result<Self>

Create a QUIC endpoint.

Source

pub async fn client(addr: impl ToSocketAddrsAsync) -> Result<Endpoint>

Available on rustls only.

Helper to construct an endpoint for use with outgoing connections only.

Note that addr is the local address to bind to, which should usually be a wildcard address like 0.0.0.0:0 or [::]:0, which allow communication with any reachable IPv4 or IPv6 address respectively from an OS-assigned port.

If an IPv6 address is provided, the socket may dual-stack depending on the platform, so as to allow communication with both IPv4 and IPv6 addresses. As such, calling this method with the address [::]:0 is a reasonable default to maximize the ability to connect to other address.

IPv4 client is never dual-stack.

Source

pub async fn server( addr: impl ToSocketAddrsAsync, config: ServerConfig, ) -> Result<Self>

Available on rustls only.

Helper to construct an endpoint for use with both incoming and outgoing connections

Platform defaults for dual-stack sockets vary. For example, any socket bound to a wildcard IPv6 address on Windows will not by default be able to communicate with IPv4 addresses. Portable applications should bind an address that matches the family they wish to communicate within.

Source

pub fn connect( &self, remote: SocketAddr, server_name: &str, config: Option<ClientConfig>, ) -> Result<Connecting, ConnectError>

Connect to a remote endpoint.

Source

pub async fn wait_incoming(&self) -> Option<Incoming>

Wait for the next incoming connection attempt from a client.

Yields Incomings, or None if the endpoint is closed. Incoming can be awaited to obtain the final Connection, or used to e.g. filter connection attempts or force address validation, or converted into an intermediate Connecting future which can be used to e.g. send 0.5-RTT data.

Source

pub fn set_server_config(&self, server_config: Option<ServerConfig>)

Replace the server configuration, affecting new incoming connections only.

Useful for e.g. refreshing TLS certificates without disrupting existing connections.

Source

pub fn local_addr(&self) -> Result<SocketAddr>

Get the local SocketAddr the underlying socket is bound to.

Source

pub fn open_connections(&self) -> usize

Get the number of connections that are currently open.

Source

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

Close all of this endpoint’s connections immediately and cease accepting new connections.

See Connection::close() for details.

Source

pub async fn shutdown(self) -> Result<()>

Gracefully shutdown the endpoint.

Wait for all connections on the endpoint to be cleanly shut down and close the underlying socket. This will wait for all clones of the endpoint, all connections and all streams to be dropped before closing the socket.

Waiting for this condition before exiting ensures that a good-faith effort is made to notify peers of recent connection closes, whereas exiting immediately could force them to wait out the idle timeout period.

Does not proactively close existing connections. Consider calling close() if that is desired.

Trait Implementations§

Source§

impl Clone for Endpoint

Source§

fn clone(&self) -> Endpoint

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Endpoint

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Endpoint

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more