From 954dbde100edd8d2d7af7990ccf42740eca2edbb Mon Sep 17 00:00:00 2001 From: Matilda Smeds Date: Wed, 3 May 2023 21:14:12 +0200 Subject: [PATCH] net: Add nodelay methods on TcpSocket We add set_nodelay() and nodelay() methods on the tokio::net::TcpSocket. This way developers can set NODELAY option on the socket directly, without having to acquire the reference to the inner socket2::TcpSocket from tokio::net::TcpStream. Closes #5510 --- tokio/src/net/tcp/socket.rs | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tokio/src/net/tcp/socket.rs b/tokio/src/net/tcp/socket.rs index 1c36d3a88df..ae897cf3afb 100644 --- a/tokio/src/net/tcp/socket.rs +++ b/tokio/src/net/tcp/socket.rs @@ -404,6 +404,51 @@ impl TcpSocket { self.inner.linger() } + /// Sets the value of the TCP_NODELAY option on this socket. + /// + /// If set, this option disables the Nagle algorithm. This means that segments are always + /// sent as soon as possible, even if there is only a small amount of data. When not set, + /// data is buffered until there is a sufficient amount to send out, thereby avoiding + /// the frequent sending of small packets. + /// + /// # Examples + /// + /// ```no_run + /// use tokio::net::TcpSocket; + /// + /// # async fn dox() -> Result<(), Box> { + /// let socket = TcpSocket::new_v4()?; + /// + /// println!("{:?}", socket.nodelay()?); + /// # Ok(()) + /// # } + /// ``` + pub fn set_nodelay(&self, nodelay: bool) -> io::Result<()> { + self.inner.set_nodelay(nodelay) + } + + /// Gets the value of the `TCP_NODELAY` option on this socket. + /// + /// For more information about this option, see [`set_nodelay`]. + /// + /// [`set_nodelay`]: TcpSocket::set_nodelay + /// + /// # Examples + /// + /// ```no_run + /// use tokio::net::TcpSocket; + /// + /// # async fn dox() -> Result<(), Box> { + /// let stream = TcpSocket::new_v4()?; + /// + /// stream.set_nodelay(true)?; + /// # Ok(()) + /// # } + /// ``` + pub fn nodelay(&self) -> io::Result { + self.inner.nodelay() + } + /// Gets the value of the `IP_TOS` option for this socket. /// /// For more information about this option, see [`set_tos`].