From b9e40ceede958b8f79cbb5bff3d1b0fe16454321 Mon Sep 17 00:00:00 2001 From: Sofia Date: Thu, 16 Jul 2026 02:58:08 +0300 Subject: [PATCH] Add separate Closed message --- src/connections.rs | 6 +++--- src/lib.rs | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/connections.rs b/src/connections.rs index afb76e3..e57227b 100644 --- a/src/connections.rs +++ b/src/connections.rs @@ -66,12 +66,12 @@ impl ConnectionManager { pub fn send_pings(&mut self) { let now = Instant::now(); - if let Some(closing_since) = self.closing_since { + if let Some(closing_since) = self.closing_since + && !self.udp.is_closed() + { if self.connections.len() == 0 { - println!("UDP closed"); self.udp.close(); } else if now - closing_since > Duration::from_millis(1000) { - println!("UDP closed"); self.udp.close(); } } diff --git a/src/lib.rs b/src/lib.rs index 8b55807..0a97c02 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,6 +31,7 @@ pub enum PeerError { pub enum PeerMessage { NewConnection(Connection), Disconnected(Connection, Option), + Closed, } pub struct Peer { @@ -79,7 +80,10 @@ impl Peer { #[must_use] pub fn poll(&mut self) -> Result, PeerError> { if self.connection_mgr.udp.is_closed() { - self.closed.store(true, Ordering::Relaxed); + if self.closed.load(Ordering::Acquire) { + self.messages.push_back(PeerMessage::Closed); + } + self.closed.store(true, Ordering::Release); } self.connection_mgr.send_pings();