From 281c20e353176584e2fa709e3ec2c618c61b301c Mon Sep 17 00:00:00 2001 From: Evan Phoenix Date: Wed, 30 Nov 2011 21:30:12 -0800 Subject: [PATCH] Set TCP_NODELAY on the listen socket only All unixs inherit NODELAY from the listen socket to the sockets returned from accept(2), so you only need to set in on the listen socket once to use it on the client sockets. --- lib/puma/server.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/puma/server.rb b/lib/puma/server.rb index a62d0517..1f6ce6e4 100644 --- a/lib/puma/server.rb +++ b/lib/puma/server.rb @@ -61,8 +61,12 @@ module Puma } end - def add_tcp_listener(host, port) - @ios << TCPServer.new(host, port) + def add_tcp_listener(host, port, optimize_for_latency=true) + s = TCPServer.new(host, port) + if optimize_for_latency + s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) + end + @ios << s end def add_unix_listener(path) @@ -126,10 +130,6 @@ module Puma end def process_client(client) - if client.kind_of? TCPSocket - client.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) - end - begin while true parser = HttpParser.new