diff --git a/russh/src/client/mod.rs b/russh/src/client/mod.rs index 7dae1889..df0b8ecf 100644 --- a/russh/src/client/mod.rs +++ b/russh/src/client/mod.rs @@ -818,7 +818,7 @@ impl Session { () = &mut keepalive_timer => { if self.common.config.keepalive_max != 0 && self.common.alive_timeouts > self.common.config.keepalive_max { debug!("Timeout, server not responding to keepalives"); - break + return Err(crate::Error::KeepaliveTimeout); } self.common.alive_timeouts = self.common.alive_timeouts.saturating_add(1); self.send_keepalive(true); @@ -826,7 +826,7 @@ impl Session { } () = &mut inactivity_timer => { debug!("timeout"); - break + return Err(crate::Error::InactivityTimeout); } msg = self.receiver.recv(), if !self.is_rekeying() => { match msg { diff --git a/russh/src/lib.rs b/russh/src/lib.rs index c713cb69..54c6d567 100644 --- a/russh/src/lib.rs +++ b/russh/src/lib.rs @@ -249,6 +249,14 @@ pub enum Error { #[error("Connection timeout")] ConnectionTimeout, + /// Keepalive timeout. + #[error("Keepalive timeout")] + KeepaliveTimeout, + + /// Inactivity timeout. + #[error("Inactivity timeout")] + InactivityTimeout, + /// Missing authentication method. #[error("No authentication method")] NoAuthMethod, diff --git a/russh/src/server/session.rs b/russh/src/server/session.rs index f83db8e5..66ae9745 100644 --- a/russh/src/server/session.rs +++ b/russh/src/server/session.rs @@ -447,7 +447,7 @@ impl Session { () = &mut keepalive_timer => { if self.common.config.keepalive_max != 0 && self.common.alive_timeouts > self.common.config.keepalive_max { debug!("Timeout, client not responding to keepalives"); - break + return Err(crate::Error::KeepaliveTimeout); } self.common.alive_timeouts = self.common.alive_timeouts.saturating_add(1); sent_keepalive = true; @@ -455,7 +455,7 @@ impl Session { } () = &mut inactivity_timer => { debug!("timeout"); - break + return Err(crate::Error::InactivityTimeout); } msg = self.receiver.recv(), if !self.is_rekeying() => { match msg {