From c9ff0acbb20457ec19f379871b08f7692d0b0a5b Mon Sep 17 00:00:00 2001 From: Dmitrii Kalianov Date: Fri, 10 Jul 2026 19:50:53 +0200 Subject: [PATCH] perf: enable TCP_NODELAY on sockets --- sqlx-core/src/net/socket/mod.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sqlx-core/src/net/socket/mod.rs b/sqlx-core/src/net/socket/mod.rs index 0f9aae61b4..c5cac47069 100644 --- a/sqlx-core/src/net/socket/mod.rs +++ b/sqlx-core/src/net/socket/mod.rs @@ -188,9 +188,9 @@ pub async fn connect_tcp( ) -> crate::Result { #[cfg(feature = "_rt-tokio")] if crate::rt::rt_tokio::available() { - return Ok(with_socket - .with_socket(tokio::net::TcpStream::connect((host, port)).await?) - .await); + let socket = tokio::net::TcpStream::connect((host, port)).await?; + socket.set_nodelay(true)?; + return Ok(with_socket.with_socket(socket).await); } cfg_if! { @@ -206,7 +206,7 @@ pub async fn connect_tcp( /// /// If `host` is a hostname, attempt to connect to each address it resolves to. /// -/// This implements the same behavior as [`tokio::net::TcpStream::connect()`]. +/// This implements the same behavior as [`tokio::net::TcpStream::connect()`] and additionally sets the `TCP_NODELAY` flag. #[cfg(feature = "_rt-async-io")] async fn connect_tcp_async_io(host: &str, port: u16) -> crate::Result { use async_io::Async; @@ -216,7 +216,9 @@ async fn connect_tcp_async_io(host: &str, port: u16) -> crate::Result() { - return Ok(Async::::connect((addr, port)).await?); + let socket = Async::::connect((addr, port)).await?; + socket.get_ref().set_nodelay(true)?; + return Ok(socket); } let host = host.to_string(); @@ -232,7 +234,10 @@ async fn connect_tcp_async_io(host: &str, port: u16) -> crate::Result::connect(socket_addr).await { - Ok(stream) => return Ok(stream), + Ok(stream) => { + stream.get_ref().set_nodelay(true)?; + return Ok(stream); + } Err(e) => last_err = Some(e), } }