From ba65c30df18326b048699eca049dffa7b4d73d9e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 4 Sep 2026 17:07:19 +0800 Subject: [PATCH] connection: keep the non-video send timeout at its long-standing 120 s Lowering `SEND_TIMEOUT_OTHER` to 30 s was a policy change on top of the bug fix, argued from the 30 s read timeout, which measures something else and cannot even run while a send is blocked. The constant goes back to `SEND_TIMEOUT_VIDEO * 10`, where it has been since 2021, and the raw port-forward loop's local write shares it again. What remains is the fix alone: the type-specific timeout is chosen once the login request has said what the connection is. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab --- src/server/connection.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index 6f8f8f843..4767e05fc 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -391,13 +391,7 @@ const SEC30: Duration = Duration::from_secs(30); const H1: Duration = Duration::from_secs(3600); const MILLI1: Duration = Duration::from_millis(1); const SEND_TIMEOUT_VIDEO: u64 = 12_000; -// The same horizon as the 30 s read timeout: a peer that has not drained a -// single message for that long is the same dead peer that check would catch. -const SEND_TIMEOUT_OTHER: u64 = 30_000; -// The raw port-forward loop's write to the local target: that loop idles for -// an hour before giving up, and a target that stops draining is not a dead -// peer, so this keeps the value the write always had. -const PORT_FORWARD_LOCAL_SEND_TIMEOUT: u64 = 120_000; +const SEND_TIMEOUT_OTHER: u64 = SEND_TIMEOUT_VIDEO * 10; const SESSION_TIMEOUT: Duration = Duration::from_secs(30); /// Whether the DRM backend can serve a Wayland login screen here. @@ -1240,7 +1234,7 @@ impl Connection { res = self.stream.next() => { if let Some(res) = res { last_recv_time = Instant::now(); - timeout(PORT_FORWARD_LOCAL_SEND_TIMEOUT, forward.send(res?)).await??; + timeout(SEND_TIMEOUT_OTHER, forward.send(res?)).await??; } else { bail!("Stream reset by the peer"); }