From 205ceba20cf930f4a55d1caf1d379a2c971cfa81 Mon Sep 17 00:00:00 2001 From: TomZz Date: Sat, 13 Jun 2026 23:31:50 +0800 Subject: [PATCH] fix: correctly track ssh network drop and emit proper closed reason --- src/backend/ssh.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/backend/ssh.rs b/src/backend/ssh.rs index 1f866d4..2951780 100644 --- a/src/backend/ssh.rs +++ b/src/backend/ssh.rs @@ -115,16 +115,15 @@ async fn run_ssh( tab_id: tab_id.clone(), }); + let mut exit_reason = "ssh session closed".to_string(); + loop { tokio::select! { command = commands.recv() => { match command { Some(BackendCommand::Input(bytes)) => { if let Err(err) = channel.data(bytes.as_slice()).await { - let _ = events.send(BackendEvent::Closed { - tab_id: tab_id.clone(), - reason: format!("ssh write error: {err}"), - }); + exit_reason = format!("ssh write error: {err}"); break; } } @@ -145,7 +144,13 @@ async fn run_ssh( bytes: data.to_vec(), }); } - Some(ChannelMsg::Close) | None => break, + Some(ChannelMsg::Close) => { + break; + } + None => { + exit_reason = "ssh connection lost (network drop)".to_string(); + break; + } _ => {} } } @@ -157,7 +162,7 @@ async fn run_ssh( .await; let _ = events.send(BackendEvent::Closed { tab_id, - reason: "ssh session closed".into(), + reason: exit_reason, }); Ok(()) }