diff --git a/docs/QUICK_START_GUIDE.en.md b/docs/QUICK_START_GUIDE.en.md index e140cf3..c43a2dc 100644 --- a/docs/QUICK_START_GUIDE.en.md +++ b/docs/QUICK_START_GUIDE.en.md @@ -72,6 +72,9 @@ classic = false secure = false tls = true +[server] +port = 443 + [server.api] enabled = true # listen = "127.0.0.1:9091" diff --git a/docs/QUICK_START_GUIDE.ru.md b/docs/QUICK_START_GUIDE.ru.md index 67dcbe2..35fbd27 100644 --- a/docs/QUICK_START_GUIDE.ru.md +++ b/docs/QUICK_START_GUIDE.ru.md @@ -72,6 +72,9 @@ classic = false secure = false tls = true +[server] +port = 443 + [server.api] enabled = true # listen = "127.0.0.1:9091" diff --git a/src/config/defaults.rs b/src/config/defaults.rs index 82ec0b3..ea9250d 100644 --- a/src/config/defaults.rs +++ b/src/config/defaults.rs @@ -147,6 +147,10 @@ pub(crate) fn default_proxy_protocol_header_timeout_ms() -> u64 { 500 } +pub(crate) fn default_server_max_connections() -> u32 { + 10_000 +} + pub(crate) fn default_prefer_4() -> u8 { 4 } diff --git a/src/config/types.rs b/src/config/types.rs index 7a1d93b..e77b027 100644 --- a/src/config/types.rs +++ b/src/config/types.rs @@ -1185,6 +1185,11 @@ pub struct ServerConfig { #[serde(default)] pub listeners: Vec, + + /// Maximum number of concurrent client connections. + /// 0 means unlimited. + #[serde(default = "default_server_max_connections")] + pub max_connections: u32, } impl Default for ServerConfig { @@ -1202,6 +1207,7 @@ impl Default for ServerConfig { metrics_whitelist: default_metrics_whitelist(), api: ApiConfig::default(), listeners: Vec::new(), + max_connections: default_server_max_connections(), } } } diff --git a/src/maestro/mod.rs b/src/maestro/mod.rs index 047c204..da00b40 100644 --- a/src/maestro/mod.rs +++ b/src/maestro/mod.rs @@ -349,8 +349,13 @@ pub async fn run() -> std::result::Result<(), Box> { let beobachten = Arc::new(BeobachtenStore::new()); let rng = Arc::new(SecureRandom::new()); - // Connection concurrency limit - let max_connections = Arc::new(Semaphore::new(10_000)); + // Connection concurrency limit (0 = unlimited) + let max_connections_limit = if config.server.max_connections == 0 { + Semaphore::MAX_PERMITS + } else { + config.server.max_connections as usize + }; + let max_connections = Arc::new(Semaphore::new(max_connections_limit)); let me2dc_fallback = config.general.me2dc_fallback; let me_init_retry_attempts = config.general.me_init_retry_attempts;