diff --git a/src/listener/tcp_listener.rs b/src/listener/tcp_listener.rs index 9ca3585f8..a17796227 100644 --- a/src/listener/tcp_listener.rs +++ b/src/listener/tcp_listener.rs @@ -22,6 +22,7 @@ pub struct TcpListener { listener: Option, server: Option>, info: Option, + tcp_nodelay: bool, } impl TcpListener { @@ -31,6 +32,7 @@ impl TcpListener { listener: None, server: None, info: None, + tcp_nodelay: true, } } @@ -40,12 +42,25 @@ impl TcpListener { listener: Some(tcp_listener.into()), server: None, info: None, + tcp_nodelay: true, } } + + /// Gets the value of the TCP_NODELAY option for tcp connections. + pub fn tcp_nodelay(&self) -> bool { + self.tcp_nodelay + } + + /// Set the TCP_NODELAY option for tcp connections. + pub fn set_tcp_nodelay(&mut self, tcp_nodelay: bool) -> &mut Self { + self.tcp_nodelay = tcp_nodelay; + self + } } -fn handle_tcp(app: Server, stream: TcpStream) { +fn handle_tcp(app: Server, stream: TcpStream, tcp_nodelay: bool) { task::spawn(async move { + stream.set_nodelay(tcp_nodelay).ok(); let local_addr = stream.local_addr().ok(); let peer_addr = stream.peer_addr().ok(); @@ -111,7 +126,7 @@ where } Ok(stream) => { - handle_tcp(server.clone(), stream); + handle_tcp(server.clone(), stream, self.tcp_nodelay); } }; }