Mercurial > crates > systemd-socket
changeset 32:ff3bd73afdd4 default tip
Set socket to nonblocking before passing it to tokio.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Sat, 19 Apr 2025 01:41:25 -0400 |
parents | fbb9e1206e3c |
children | |
files | src/lib.rs |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib.rs Sun Apr 20 17:55:34 2025 +0200 +++ 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<tokio::net::TcpListener, TokioBindError> { @@ -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<tokio::net::TcpListener, std::io::Error> { + 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.