diff --git a/rpxy-bin/src/config/toml.rs b/rpxy-bin/src/config/toml.rs index 339fed8..7cd3653 100644 --- a/rpxy-bin/src/config/toml.rs +++ b/rpxy-bin/src/config/toml.rs @@ -176,9 +176,9 @@ impl TryInto for &ConfigToml { if let Some(timeout) = exp.connection_handling_timeout { if timeout == 0u64 { - proxy_config.connection_handling_timeout = Duration::from_secs(u64::MAX); + proxy_config.connection_handling_timeout = None; } else { - proxy_config.connection_handling_timeout = Duration::from_secs(timeout); + proxy_config.connection_handling_timeout = Some(Duration::from_secs(timeout)); } } diff --git a/rpxy-lib/src/globals.rs b/rpxy-lib/src/globals.rs index 4c499f1..e4bff9e 100644 --- a/rpxy-lib/src/globals.rs +++ b/rpxy-lib/src/globals.rs @@ -47,7 +47,7 @@ pub struct ProxyConfig { pub sni_consistency: bool, // Handler /// Connection handling timeout /// timeout to handle a connection, total time of receive request, serve, and send response. this might limits the max length of response. - pub connection_handling_timeout: Duration, + pub connection_handling_timeout: Option, #[cfg(feature = "cache")] pub cache_enabled: bool, @@ -94,7 +94,7 @@ impl Default for ProxyConfig { keepalive: true, sni_consistency: true, - connection_handling_timeout: Duration::from_secs(u64::MAX), + connection_handling_timeout: None, #[cfg(feature = "cache")] cache_enabled: false, diff --git a/rpxy-lib/src/lib.rs b/rpxy-lib/src/lib.rs index a88c646..115b78a 100644 --- a/rpxy-lib/src/lib.rs +++ b/rpxy-lib/src/lib.rs @@ -55,10 +55,10 @@ where if proxy_config.https_port.is_some() { info!("Listen port: {} (for TLS)", proxy_config.https_port.unwrap()); } - if proxy_config.connection_handling_timeout.as_secs() < u64::MAX { + if proxy_config.connection_handling_timeout.is_some() { info!( - "Force connection handling timeout: {} sec", - proxy_config.connection_handling_timeout.as_secs() + "Force connection handling timeout: {:?} sec", + proxy_config.connection_handling_timeout.unwrap_or_default().as_secs() ); } #[cfg(any(feature = "http3-quinn", feature = "http3-s2n"))] diff --git a/rpxy-lib/src/proxy/proxy_h3.rs b/rpxy-lib/src/proxy/proxy_h3.rs index 8b8b686..1e0f24f 100644 --- a/rpxy-lib/src/proxy/proxy_h3.rs +++ b/rpxy-lib/src/proxy/proxy_h3.rs @@ -70,12 +70,12 @@ where let self_inner = self.clone(); let tls_server_name_inner = tls_server_name.clone(); self.globals.runtime_handle.spawn(async move { - if let Err(e) = tokio::time::timeout( - self_inner.globals.proxy_config.connection_handling_timeout, - self_inner.h3_serve_stream(req, stream, client_addr, tls_server_name_inner), - ) - .await - { + let fut = self_inner.h3_serve_stream(req, stream, client_addr, tls_server_name_inner); + if let Some(connection_handling_timeout) = self_inner.globals.proxy_config.connection_handling_timeout { + if let Err(e) = tokio::time::timeout(connection_handling_timeout, fut).await { + warn!("HTTP/3 error on serve stream: {}", e); + }; + } else if let Err(e) = fut.await { warn!("HTTP/3 error on serve stream: {}", e); } request_count.decrement(); diff --git a/rpxy-lib/src/proxy/proxy_main.rs b/rpxy-lib/src/proxy/proxy_main.rs index c3d2143..67eeb30 100644 --- a/rpxy-lib/src/proxy/proxy_main.rs +++ b/rpxy-lib/src/proxy/proxy_main.rs @@ -91,24 +91,25 @@ where let handling_timeout = self.globals.proxy_config.connection_handling_timeout; self.globals.runtime_handle.clone().spawn(async move { - timeout( - handling_timeout, - server_clone.serve_connection_with_upgrades( - stream, - service_fn(move |req: Request| { - serve_request( - req, - message_handler_clone.clone(), - peer_addr, - listening_on, - tls_enabled, - tls_server_name.clone(), - ) - }), - ), - ) - .await - .ok(); + let fut = server_clone.serve_connection_with_upgrades( + stream, + service_fn(move |req: Request| { + serve_request( + req, + message_handler_clone.clone(), + peer_addr, + listening_on, + tls_enabled, + tls_server_name.clone(), + ) + }), + ); + + if let Some(handling_timeout) = handling_timeout { + timeout(handling_timeout, fut).await.ok(); + } else { + fut.await.ok(); + } request_count.decrement(); debug!("Request processed: current # {}", request_count.current()); diff --git a/submodules/s2n-quic-h3/Cargo.toml b/submodules/s2n-quic-h3/Cargo.toml index e863ca5..59a5403 100644 --- a/submodules/s2n-quic-h3/Cargo.toml +++ b/submodules/s2n-quic-h3/Cargo.toml @@ -13,5 +13,5 @@ publish = false bytes = { version = "1", default-features = false } futures = { version = "0.3", default-features = false } h3 = { path = "../h3/h3/" } -s2n-quic = "1.32.0" -s2n-quic-core = "0.32.0" +s2n-quic = "1.33.0" +s2n-quic-core = "0.33.0"