From 421eeb3fe9270ba62aac3546671a0c0db1456975 Mon Sep 17 00:00:00 2001 From: Kostya Vasilyev Date: Thu, 30 Apr 2026 21:40:44 -0700 Subject: [PATCH] Change return value of close to bool to indicate if the close packet was queued up --- .gitignore | 1 + src/dtls12/client.rs | 8 ++++---- src/dtls12/server.rs | 8 ++++---- src/dtls13/client.rs | 8 ++++---- src/dtls13/server.rs | 8 ++++---- src/lib.rs | 2 +- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf7..2a0038a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +.idea \ No newline at end of file diff --git a/src/dtls12/client.rs b/src/dtls12/client.rs index 9357a7e2..8996bb25 100644 --- a/src/dtls12/client.rs +++ b/src/dtls12/client.rs @@ -235,14 +235,14 @@ impl Client { } /// Initiate graceful shutdown by sending a `close_notify` alert. - pub fn close(&mut self) -> Result<(), Error> { + pub fn close(&mut self) -> Result { if self.state == State::Closed { - return Ok(()); + return Ok(false); } if self.state != State::AwaitApplicationData { self.engine.abort(); self.state = State::Closed; - return Ok(()); + return Ok(false); } self.engine .create_record(ContentType::Alert, 1, false, |body| { @@ -250,7 +250,7 @@ impl Client { body.push(0); // description: close_notify })?; self.state = State::Closed; - Ok(()) + Ok(true) } fn make_progress(&mut self) -> Result<(), Error> { diff --git a/src/dtls12/server.rs b/src/dtls12/server.rs index 8d3d3352..88212cd3 100644 --- a/src/dtls12/server.rs +++ b/src/dtls12/server.rs @@ -232,14 +232,14 @@ impl Server { } /// Initiate graceful shutdown by sending a `close_notify` alert. - pub fn close(&mut self) -> Result<(), Error> { + pub fn close(&mut self) -> Result { if self.state == State::Closed { - return Ok(()); + return Ok(false); } if self.state != State::AwaitApplicationData { self.engine.abort(); self.state = State::Closed; - return Ok(()); + return Ok(false); } self.engine .create_record(ContentType::Alert, 1, false, |body| { @@ -247,7 +247,7 @@ impl Server { body.push(0); // description: close_notify })?; self.state = State::Closed; - Ok(()) + Ok(true) } fn make_progress(&mut self) -> Result<(), Error> { diff --git a/src/dtls13/client.rs b/src/dtls13/client.rs index b18408da..eaac4cd0 100644 --- a/src/dtls13/client.rs +++ b/src/dtls13/client.rs @@ -271,14 +271,14 @@ impl Client { } /// Initiate graceful shutdown by sending a `close_notify` alert. - pub fn close(&mut self) -> Result<(), Error> { + pub fn close(&mut self) -> Result { if self.state == State::Closed || self.state == State::HalfClosedLocal { - return Ok(()); + return Ok(false); } if self.state != State::AwaitApplicationData { self.engine.abort(); self.state = State::Closed; - return Ok(()); + return Ok(false); } let epoch = self.engine.app_send_epoch(); self.engine @@ -288,7 +288,7 @@ impl Client { })?; self.engine.cancel_flights(); self.state = State::HalfClosedLocal; - Ok(()) + Ok(true) } fn make_progress(&mut self) -> Result<(), Error> { diff --git a/src/dtls13/server.rs b/src/dtls13/server.rs index 71f3dfd7..9e6c9268 100644 --- a/src/dtls13/server.rs +++ b/src/dtls13/server.rs @@ -307,14 +307,14 @@ impl Server { } /// Initiate graceful shutdown by sending a `close_notify` alert. - pub fn close(&mut self) -> Result<(), Error> { + pub fn close(&mut self) -> Result { if self.state == State::Closed || self.state == State::HalfClosedLocal { - return Ok(()); + return Ok(false); } if self.state != State::AwaitApplicationData { self.engine.abort(); self.state = State::Closed; - return Ok(()); + return Ok(false); } let epoch = self.engine.app_send_epoch(); self.engine @@ -324,7 +324,7 @@ impl Server { })?; self.engine.cancel_flights(); self.state = State::HalfClosedLocal; - Ok(()) + Ok(true) } fn make_progress(&mut self) -> Result<(), Error> { diff --git a/src/lib.rs b/src/lib.rs index 1777e2ff..67c422c1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -790,7 +790,7 @@ impl Dtls { /// connection can simply drop the [`Dtls`] value. /// /// The alert is not retransmitted (per RFC 6347 §4.2.7 / RFC 9147 §5.10). - pub fn close(&mut self) -> Result<(), Error> { + pub fn close(&mut self) -> Result { let inner = self.inner.as_mut().unwrap(); if inner.is_pending() {