about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2012-11-29 21:48:31 +0000
committerEric Wong <normalperson@yhbt.net>2012-11-29 23:00:15 +0000
commit90db7b14eab449da8cef4ef22ab76ae00f654361 (patch)
tree17b574022aae475b6f2373482026b238f43f1288
parent5c700fc2cf398848ddcf71a2aa3f0f2a6563e87b (diff)
downloadunicorn-90db7b14eab449da8cef4ef22ab76ae00f654361.tar.gz
In my testing, only dropped clients over Unix domain sockets or
loopback TCP were detected with this option.  Since many
nginx+unicorn combinations run on the same host, this is not a
problem.

Furthermore, tcp_nodelay:true appears to work over loopback,
so remove the requirement for tcp_nodelay:false.
-rw-r--r--examples/unicorn.conf.rb4
-rw-r--r--lib/unicorn/configurator.rb11
2 files changed, 8 insertions, 7 deletions
diff --git a/examples/unicorn.conf.rb b/examples/unicorn.conf.rb
index 1f4c9c0..4042d9c 100644
--- a/examples/unicorn.conf.rb
+++ b/examples/unicorn.conf.rb
@@ -49,7 +49,9 @@ GC.respond_to?(:copy_on_write_friendly=) and
 # Enable this flag to have unicorn test client connections by writing the
 # beginning of the HTTP headers before calling the application.  This
 # prevents calling the application for connections that have disconnected
-# while queued.
+# while queued.  This is only guaranteed to detect clients on the same
+# host unicorn runs on, and unlikely to detect disconnects even on a
+# fast LAN.
 check_client_connection false
 
 before_fork do |server, worker|
diff --git a/lib/unicorn/configurator.rb b/lib/unicorn/configurator.rb
index 9752cdd..7651093 100644
--- a/lib/unicorn/configurator.rb
+++ b/lib/unicorn/configurator.rb
@@ -103,10 +103,6 @@ class Unicorn::Configurator
           raise ArgumentError,
             "check_client_connection is incompatible with tcp_nopush:true"
         end
-        if set[:listener_opts][address][:tcp_nodelay] == true
-          raise ArgumentError,
-            "check_client_connection is incompatible with tcp_nodelay:true"
-        end
       end
     end
     set.each do |key, value|
@@ -473,8 +469,11 @@ class Unicorn::Configurator
   # This will prevent calling the application for clients who have
   # disconnected while their connection was queued.
   #
-  # This option cannot be used in conjunction with tcp_nodelay or
-  # tcp_nopush.
+  # This only affects clients connecting over Unix domain sockets
+  # and TCP via loopback (127.*.*.*).  It is unlikely to detect
+  # disconnects if the client is on a remote host (even on a fast LAN).
+  #
+  # This option cannot be used in conjunction with :tcp_nopush.
   def check_client_connection(bool)
     set_bool(:check_client_connection, bool)
   end