summaryrefslogtreecommitdiff
path: root/src/server/client_accept.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-25 15:36:50 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-25 15:36:50 +0300
commitd4a5e02e8433db156b9dabe2b81ddd1d2aca9ea6 (patch)
treef94ebdfc2bf1e54b3d110052269c67b6ba5f6fb8 /src/server/client_accept.rs
parenta1543f3e248f8f5266322014ccd853e478b1dcd6 (diff)
feat: hand off ptys during updates
Diffstat (limited to 'src/server/client_accept.rs')
-rw-r--r--src/server/client_accept.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/client_accept.rs b/src/server/client_accept.rs
index 61db2eb9..afb2c398 100644
--- a/src/server/client_accept.rs
+++ b/src/server/client_accept.rs
@@ -48,3 +48,22 @@ pub(crate) fn accept_pending_client_connections(
Ok(())
}
+
+/// Drains pending thin-client connections without starting handshakes.
+///
+/// During live handoff the old server must not let clients sit in the Unix
+/// listener backlog waiting for a welcome frame that will never be sent.
+pub(crate) fn reject_pending_client_connections(listener: &UnixListener) -> io::Result<()> {
+ loop {
+ match listener.accept() {
+ Ok((_stream, _addr)) => {}
+ Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => break,
+ Err(err) => {
+ error!(err = %err, "client listener reject failed");
+ break;
+ }
+ }
+ }
+
+ Ok(())
+}