# HG changeset patch # User Paul Fisher # Date 1745041285 14400 # Node ID e15210d1e534c59528597e58951ca999e1218ff4 # Parent 85b0f4a7303d3727b36c46eb89bf8384941040c3 Set socket to nonblocking before passing it to tokio. diff -r 85b0f4a7303d -r e15210d1e534 src/lib.rs --- a/src/lib.rs Fri Feb 28 23:15:59 2025 +0100 +++ b/src/lib.rs Sat Apr 19 01:41:25 2025 -0400 @@ -334,7 +334,7 @@ /// /// To be specific, it binds the socket or converts systemd socket to `tokio` 1.0 socket. /// - /// This method either `binds` the socket, if the address was provided or uses systemd socket + /// This method either `bind`s the socket, if the address was provided or uses systemd socket /// if the socket name was provided. #[cfg(feature = "tokio")] pub async fn bind_tokio(self) -> Result { @@ -349,15 +349,23 @@ }, SocketAddrInner::Systemd(socket_name) => { let (socket, addr) = Self::get_systemd(socket_name, true)?; - socket.try_into().map_err(|error| TokioConversionError { addr, error, }.into()) - }, + Self::wrap_tokio(socket) + .map_err(|error| TokioConversionError { addr, error }.into()) + } SocketAddrInner::SystemdNoPrefix(socket_name) => { let (socket, addr) = Self::get_systemd(socket_name, false)?; - socket.try_into().map_err(|error| TokioConversionError { addr, error, }.into()) - }, + Self::wrap_tokio(socket) + .map_err(|error| TokioConversionError { addr, error }.into()) + } } } + #[cfg(feature = "tokio")] + fn wrap_tokio(socket: std::net::TcpListener) -> Result { + socket.set_nonblocking(true)?; + socket.try_into() + } + /// Creates `tokio::net::TcpListener` /// /// To be specific, it binds the socket or converts systemd socket to `tokio` 0.2 socket.