aboutsummaryrefslogtreecommitdiff
path: root/src/server/client_accept.rs
diff options
context:
space:
mode:
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(())
+}