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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EZ49AbZJYfm8NTp5yDPMab
This commit is contained in:
rustdesk
2026-09-04 17:07:19 +08:00
parent ac0b226568
commit ba65c30df1

View File

@@ -391,13 +391,7 @@ const SEC30: Duration = Duration::from_secs(30);
const H1: Duration = Duration::from_secs(3600); const H1: Duration = Duration::from_secs(3600);
const MILLI1: Duration = Duration::from_millis(1); const MILLI1: Duration = Duration::from_millis(1);
const SEND_TIMEOUT_VIDEO: u64 = 12_000; const SEND_TIMEOUT_VIDEO: u64 = 12_000;
// The same horizon as the 30 s read timeout: a peer that has not drained a const SEND_TIMEOUT_OTHER: u64 = SEND_TIMEOUT_VIDEO * 10;
// 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 SESSION_TIMEOUT: Duration = Duration::from_secs(30); const SESSION_TIMEOUT: Duration = Duration::from_secs(30);
/// Whether the DRM backend can serve a Wayland login screen here. /// Whether the DRM backend can serve a Wayland login screen here.
@@ -1240,7 +1234,7 @@ impl Connection {
res = self.stream.next() => { res = self.stream.next() => {
if let Some(res) = res { if let Some(res) = res {
last_recv_time = Instant::now(); last_recv_time = Instant::now();
timeout(PORT_FORWARD_LOCAL_SEND_TIMEOUT, forward.send(res?)).await??; timeout(SEND_TIMEOUT_OTHER, forward.send(res?)).await??;
} else { } else {
bail!("Stream reset by the peer"); bail!("Stream reset by the peer");
} }