Struct durian::ServerConfig

source ·
pub struct ServerConfig {
    pub addr: String,
    pub wait_for_clients: u32,
    pub total_expected_clients: Option<u32>,
    pub max_concurrent_accepts: u32,
    pub num_receive_streams: u32,
    pub num_send_streams: u32,
    pub keep_alive_interval: Option<Duration>,
    pub idle_timeout: Option<Duration>,
    pub alpn_protocols: Option<Vec<Vec<u8>>>,
}
Expand description

Server configuration for spinning up a server on a socket address via PacketManager::init_server()

Fields§

§addr: String

Socket address of the server (hostname:port) (e.g. “127.0.0.1:5001”)

§wait_for_clients: u32

Number of clients to block waiting for incoming connections

§total_expected_clients: Option<u32>

[Optional] Total number of clients the server expects to connect with. The server will spin up a thread that waits for incoming client connections until total_expected_clients is reached. Set to None to allow any number of clients connections. If wait_for_clients > total_expected_clients, the server will still wait for wait_for_clients number of client connections.

§max_concurrent_accepts: u32

Set the max number of concurrent connection accepts to process at any given time.

A thread will be spawned for each, allowing max_concurrent_accepts connections to come in at the same time. Default to wait_for_clients + total_expected_clients(if set), else number of cores available.

§num_receive_streams: u32

Number of receive streams to accept from server to client. Must be equal to number of receive packets registered through PacketManager::register_receive_packet()

§num_send_streams: u32

Number of send streams to open from client to server. Must be equal to number of send packets registered through PacketManager::register_send_packet()

§keep_alive_interval: Option<Duration>

Period of inactivity before sending a keep-alive packet

Keep-alive packets prevent an inactive but otherwise healthy connection from timing out.

None to disable, which is the default. Only one side of any given connection needs keep-alive enabled for the connection to be preserved. Must be set lower than the idle_timeout of both peers to be effective.

§idle_timeout: Option<Duration>

Maximum duration of inactivity to accept before timing out the connection. The true idle timeout is the minimum of this and the peer’s own max idle timeout. Defaults to 60 seconds. None represents an infinite timeout.

IMPORTANT: In the case of clients disconnecting abruptly, i.e. your application cannot call PacketManager::close_connection() or PacketManager::finish_connection() gracefully, the true idle timeout will help to remove disconnected clients from the connection queue, thus allowing them to reconnect after that timeout frame.

WARNING: If a peer or its network path malfunctions or acts maliciously, an infinite idle timeout can result in permanently hung futures!

§alpn_protocols: Option<Vec<Vec<u8>>>

Protocols to send to server if applicable.

Example:

use durian::ServerConfig;

let mut config = ServerConfig::new("127.0.0.1:5000", 0, None, 2, 2);
config.with_alpn_protocols(&[b"hq-29"]);

Implementations§

source§

impl ServerConfig

source

pub fn new<S: Into<String>>( addr: S, wait_for_clients: u32, total_expected_clients: Option<u32>, num_receive_streams: u32, num_send_streams: u32 ) -> Self

Construct and return a new ServerConfig

source

pub fn new_with_max_clients<S: Into<String>>( addr: S, wait_for_clients: u32, num_receive_streams: u32, num_send_streams: u32 ) -> Self

Construct and return a new ServerConfig that only allows up to wait_for_clients number of client connections

source

pub fn new_listening<S: Into<String>>( addr: S, wait_for_clients: u32, num_receive_streams: u32, num_send_streams: u32 ) -> Self

Construct and return a new ServerConfig, with total_expected_clients set to None so the server continuously accepts new client connections

source

pub fn with_keep_alive_interval(&mut self, duration: Duration) -> &mut Self

Set the keep alive interval

source

pub fn with_idle_timeout(&mut self, duration: Option<Duration>) -> &mut Self

Set the max idle timeout

source

pub fn with_alpn_protocols(&mut self, protocols: &[&[u8]]) -> &mut Self

Set the ALPN protocols

source

pub fn with_max_concurrent_accepts( &mut self, max_concurrent_accepts: u32 ) -> &mut Self

Set the max concurrent accept connections

Trait Implementations§

source§

impl Clone for ServerConfig

source§

fn clone(&self) -> ServerConfig

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 ServerConfig

source§

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

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

impl PartialEq<ServerConfig> for ServerConfig

source§

fn eq(&self, other: &ServerConfig) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for ServerConfig

source§

impl StructuralEq for ServerConfig

source§

impl StructuralPartialEq for ServerConfig

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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 Twhere 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> ToOwned for Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.
§

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

§

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