diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-25 15:36:50 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-25 15:36:50 +0300 |
| commit | d4a5e02e8433db156b9dabe2b81ddd1d2aca9ea6 (patch) | |
| tree | f94ebdfc2bf1e54b3d110052269c67b6ba5f6fb8 /src/server/client_accept.rs | |
| parent | a1543f3e248f8f5266322014ccd853e478b1dcd6 (diff) | |
feat: hand off ptys during updates
Diffstat (limited to 'src/server/client_accept.rs')
| -rw-r--r-- | src/server/client_accept.rs | 19 |
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(()) +} |
