From 90db7b14eab449da8cef4ef22ab76ae00f654361 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 29 Nov 2012 21:48:31 +0000 Subject: check_client_connection: document local-only requirement 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. --- examples/unicorn.conf.rb | 4 +++- lib/unicorn/configurator.rb | 11 +++++------ 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 -- cgit v1.2.3-24-ge0c7