From 640fa995a4ae3c5a0aaaafe04857930979edc220 Mon Sep 17 00:00:00 2001 From: Ferdinand Schober Date: Mon, 3 Nov 2025 18:04:18 +0100 Subject: [PATCH] improve reliability of connections (#349) --- src/connect.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/connect.rs b/src/connect.rs index fb77e8e..cc067f7 100644 --- a/src/connect.rs +++ b/src/connect.rs @@ -223,14 +223,18 @@ async fn ping_pong( ) { loop { let (buf, len) = ProtoEvent::Ping.into(); - if let Err(e) = conn.send(&buf[..len]).await { - log::warn!("{addr}: send error `{e}`, closing connection"); - let _ = conn.close().await; - break; - } - log::trace!("PING >->->->->- {addr}"); - tokio::time::sleep(Duration::from_millis(500)).await; + // send 4 pings, at least one must be answered + for _ in 0..4 { + if let Err(e) = conn.send(&buf[..len]).await { + log::warn!("{addr}: send error `{e}`, closing connection"); + let _ = conn.close().await; + break; + } + log::trace!("PING >->->->->- {addr}"); + + tokio::time::sleep(Duration::from_millis(500)).await; + } if !ping_response.borrow_mut().remove(&addr) { log::warn!("{addr} did not respond, closing connection");