From e54fb3fffc7413bc9e4d14688a149c0a84deb7e8 Mon Sep 17 00:00:00 2001 From: Andrey Akifev Date: Mon, 16 Feb 2026 12:49:49 +0700 Subject: [PATCH] Reduce per-frame flush overhead --- src/proxy/middle_relay.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/proxy/middle_relay.rs b/src/proxy/middle_relay.rs index 01ccc20..09dd532 100644 --- a/src/proxy/middle_relay.rs +++ b/src/proxy/middle_relay.rs @@ -263,7 +263,14 @@ where } } - client_writer.flush().await.map_err(ProxyError::Io) + // Avoid unconditional per-frame flush (throughput killer on large downloads). + // Flush only when low-latency ack semantics are requested or when + // CryptoWriter has buffered pending ciphertext that must be drained. + if quickack || client_writer.has_pending() { + client_writer.flush().await.map_err(ProxyError::Io)?; + } + + Ok(()) } async fn write_client_ack( @@ -283,5 +290,6 @@ where .write_all(&bytes) .await .map_err(ProxyError::Io)?; + // ACK should remain low-latency. client_writer.flush().await.map_err(ProxyError::Io) }