pub struct ServerConfig {Show 20 fields
pub drain_timeout: Duration,
pub header_read_timeout: Option<Duration>,
pub keep_alive: bool,
pub keep_alive_timeout: Option<Duration>,
pub h2_max_concurrent_streams: u32,
pub h2_max_header_list_size: u32,
pub h2_max_send_buf_size: usize,
pub h2_max_pending_accept_reset_streams: usize,
pub h2_keep_alive_interval: Option<Duration>,
pub h3_max_concurrent_bidi_streams: u32,
pub h3_max_concurrent_uni_streams: u32,
pub h3_max_idle_timeout: Option<Duration>,
pub h3_congestion: H3Congestion,
pub h3_enable_datagrams: bool,
pub h3_use_retry: bool,
pub h3_goaway_grace: Duration,
pub max_connections: Option<usize>,
pub proxy_read_timeout: Duration,
pub tls_handshake_timeout: Duration,
pub accept_backoff: AcceptBackoff,
}Expand description
Production-readiness knobs shared by every Tako server transport.
Default mirrors the historical hardcoded values (30 s drain, 30 s header
read, 100 H2 streams, …) so existing call sites keep their behavior. Pass
a populated ServerConfig to *_with_config entry points to override
individual knobs.
Fields§
§drain_timeout: DurationMaximum time the coordinator waits for in-flight connections to finish after a shutdown signal. After this elapses, remaining tasks are aborted.
header_read_timeout: Option<Duration>Maximum time hyper waits for the request line + headers to arrive.
None disables the timeout (the previous behavior).
keep_alive: boolHTTP/1 keep-alive (default true).
keep_alive_timeout: Option<Duration>HTTP/1 keep-alive idle timeout (Hyper default applies if None).
h2_max_concurrent_streams: u32HTTP/2 SETTINGS_MAX_CONCURRENT_STREAMS cap.
h2_max_header_list_size: u32HTTP/2 SETTINGS_MAX_HEADER_LIST_SIZE cap (bytes).
h2_max_send_buf_size: usizeHTTP/2 send-buffer cap per stream (bytes).
h2_max_pending_accept_reset_streams: usizeHTTP/2 pending-accept RST_STREAM cap (CVE-2023-44487 mitigation).
h2_keep_alive_interval: Option<Duration>HTTP/2 keep-alive ping interval. None disables.
h3_max_concurrent_bidi_streams: u32HTTP/3 cap on concurrent client-initiated bidirectional streams. Maps to
quinn::TransportConfig::max_concurrent_bidi_streams.
h3_max_concurrent_uni_streams: u32HTTP/3 cap on concurrent client-initiated unidirectional streams. Maps to
quinn::TransportConfig::max_concurrent_uni_streams.
h3_max_idle_timeout: Option<Duration>HTTP/3 idle-timeout (no QUIC packets in either direction). None lets
quinn pick its default; Some(d) caps the connection lifetime.
h3_congestion: H3CongestionHTTP/3 congestion controller selection.
h3_enable_datagrams: boolEnable QUIC datagrams (RFC 9221) on HTTP/3 connections. Required for downstream WebTransport-style traffic.
h3_use_retry: boolIssue a QUIC Retry packet for each new connection whose source address has not been validated. Mitigates UDP source-address-spoofing amplification attacks at the cost of one extra round-trip per new client.
h3_goaway_grace: DurationPer-connection grace given to in-flight HTTP/3 streams to finish after the per-connection GOAWAY.
The effective grace at runtime is min(h3_goaway_grace, drain_timeout)
— the server clamps this so a long per-connection grace cannot push the
total shutdown past the global drain budget. Configuring
h3_goaway_grace larger than drain_timeout is therefore a no-op
beyond the global ceiling.
max_connections: Option<usize>Optional ceiling on concurrent in-flight connections. Enforced via a
semaphore in the accept loop; None disables.
proxy_read_timeout: DurationRead deadline applied before the PROXY protocol header is parsed.
tls_handshake_timeout: DurationMaximum time the TLS acceptor waits for the client to complete its
handshake. A slow / stalled handshake holds a max_connections permit
open indefinitely otherwise — TLS slowloris. Default 10 seconds.
accept_backoff: AcceptBackoffBackoff schedule for accept() errors (typically EMFILE/ENFILE).
Trait Implementations§
Source§impl Clone for ServerConfig
impl Clone for ServerConfig
Source§fn clone(&self) -> ServerConfig
fn clone(&self) -> ServerConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ServerConfig
impl Debug for ServerConfig
Source§impl Default for ServerConfig
impl Default for ServerConfig
Source§fn default() -> ServerConfig
fn default() -> ServerConfig
Auto Trait Implementations§
impl Freeze for ServerConfig
impl RefUnwindSafe for ServerConfig
impl Send for ServerConfig
impl Sync for ServerConfig
impl Unpin for ServerConfig
impl UnsafeUnpin for ServerConfig
impl UnwindSafe for ServerConfig
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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