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
impl Endpoint
Sourcepub fn new(
socket: UdpSocket,
config: EndpointConfig,
server_config: Option<ServerConfig>,
default_client_config: Option<ClientConfig>,
) -> Result<Self>
pub fn new( socket: UdpSocket, config: EndpointConfig, server_config: Option<ServerConfig>, default_client_config: Option<ClientConfig>, ) -> Result<Self>
Create a QUIC endpoint.
Sourcepub async fn client(addr: impl ToSocketAddrsAsync) -> Result<Endpoint>
Available on rustls
only.
pub async fn client(addr: impl ToSocketAddrsAsync) -> Result<Endpoint>
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.
Sourcepub async fn server(
addr: impl ToSocketAddrsAsync,
config: ServerConfig,
) -> Result<Self>
Available on rustls
only.
pub async fn server( addr: impl ToSocketAddrsAsync, config: ServerConfig, ) -> Result<Self>
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.
Sourcepub fn connect(
&self,
remote: SocketAddr,
server_name: &str,
config: Option<ClientConfig>,
) -> Result<Connecting, ConnectError>
pub fn connect( &self, remote: SocketAddr, server_name: &str, config: Option<ClientConfig>, ) -> Result<Connecting, ConnectError>
Connect to a remote endpoint.
Sourcepub async fn wait_incoming(&self) -> Option<Incoming>
pub async fn wait_incoming(&self) -> Option<Incoming>
Wait for the next incoming connection attempt from a client.
Yields Incoming
s, or None
if the endpoint is
close
d. Incoming
can be await
ed 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.
Sourcepub fn set_server_config(&self, server_config: Option<ServerConfig>)
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.
Sourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
Get the local SocketAddr
the underlying socket is bound to.
Sourcepub fn open_connections(&self) -> usize
pub fn open_connections(&self) -> usize
Get the number of connections that are currently open.
Sourcepub fn close(&self, error_code: VarInt, reason: &[u8])
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.
Sourcepub async fn shutdown(self) -> Result<()>
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§
Auto Trait Implementations§
impl Freeze for Endpoint
impl !RefUnwindSafe for Endpoint
impl Send for Endpoint
impl Sync for Endpoint
impl Unpin for Endpoint
impl !UnwindSafe for Endpoint
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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