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. --- Eric Wong <normalper...@yhbt.net> wrote: > Tom Burns <tom.bu...@jadedpixel.com> wrote: > > + if set[:check_client_connection] > > + set[:listeners].each do |address| > > + if set[:listener_opts][address][:tcp_nopush] == true > > + raise ArgumentError, > > + "check_client_connection is incompatible with tcp_nopush:true" > > + end > > Btw, were you using: > > 1) TCP over loopback (bound to 0.0.0.0, client comes from 127.0.0.1) > 2) TCP over a LAN (separate client/server hosts) > 3) Unix domain socket > > I wonder if we can drop the below hunk for checking :tcp_nodelay, > and document that check_client_connection requires the client to > either be from a Unix domain socket or TCP loopback to work. > > > + if set[:listener_opts][address][:tcp_nodelay] == true > > + raise ArgumentError, > > + "check_client_connection is incompatible with tcp_nodelay:true" > > + end > > I couldn't get 2) to work with either value of tcp_nodelay. My small > LAN at home only has ~0.100ms latency. > > Happily, with TCP over loopback (on Linux 3.6), either value of > tcp_nodelay works, so the tcp_nodelay check seems unnecessary after > all. lib/unicorn/configurator.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) 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 -- 1.8.0.3.gdd57fab.dirty _______________________________________________ Unicorn mailing list - mongrel-unicorn@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-unicorn Do not quote signatures (like this one) or top post when replying