about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-01-31 16:14:46 -0800
committerEric Wong <normalperson@yhbt.net>2011-01-31 16:14:46 -0800
commit24f8ef5f385e38954a5582fb2e8cd9d12fbf7d20 (patch)
tree701808760ee5fb0efed4590ced2e759002c99a15 /lib
parentc28e2610cfc70e89a0ffabe18356d148afe98bfc (diff)
downloadunicorn-24f8ef5f385e38954a5582fb2e8cd9d12fbf7d20.tar.gz
This reduces surprise when people (correctly) believe
removing an option from the config file will return
things back to our internal defaults.
Diffstat (limited to 'lib')
-rw-r--r--lib/unicorn/socket_helper.rb34
1 files changed, 18 insertions, 16 deletions
diff --git a/lib/unicorn/socket_helper.rb b/lib/unicorn/socket_helper.rb
index 9600b34..0cab3cb 100644
--- a/lib/unicorn/socket_helper.rb
+++ b/lib/unicorn/socket_helper.rb
@@ -49,17 +49,19 @@ module Unicorn
 
     def set_tcp_sockopt(sock, opt)
       # highly portable, but off by default because we don't do keepalive
-      if defined?(TCP_NODELAY) && ! (val = opt[:tcp_nodelay]).nil?
+      if defined?(TCP_NODELAY)
+        val = opt[:tcp_nodelay]
+        val = DEFAULTS[:tcp_nodelay] if nil == val
         sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, val ? 1 : 0)
       end
 
-      unless (val = opt[:tcp_nopush]).nil?
-        val = val ? 1 : 0
-        if defined?(TCP_CORK) # Linux
-          sock.setsockopt(IPPROTO_TCP, TCP_CORK, val)
-        elsif defined?(TCP_NOPUSH) # TCP_NOPUSH is untested (FreeBSD)
-          sock.setsockopt(IPPROTO_TCP, TCP_NOPUSH, val)
-        end
+      val = opt[:tcp_nopush]
+      val = DEFAULTS[:tcp_nopush] if nil == val
+      val = val ? 1 : 0
+      if defined?(TCP_CORK) # Linux
+        sock.setsockopt(IPPROTO_TCP, TCP_CORK, val)
+      elsif defined?(TCP_NOPUSH) # TCP_NOPUSH is untested (FreeBSD)
+        sock.setsockopt(IPPROTO_TCP, TCP_NOPUSH, val)
       end
 
       # No good reason to ever have deferred accepts off
@@ -68,17 +70,17 @@ module Unicorn
         # this differs from nginx, since nginx doesn't allow us to
         # configure the the timeout...
         seconds = opt[:tcp_defer_accept]
-        seconds = DEFAULTS[:tcp_defer_accept] if seconds == true
+        seconds = DEFAULTS[:tcp_defer_accept] if [true,nil].include?(seconds)
         seconds = 0 unless seconds # nil/false means disable this
         sock.setsockopt(SOL_TCP, TCP_DEFER_ACCEPT, seconds)
       elsif respond_to?(:accf_arg)
-        if name = opt[:accept_filter]
-          begin
-            sock.setsockopt(SOL_SOCKET, SO_ACCEPTFILTER, accf_arg(name))
-          rescue => e
-            logger.error("#{sock_name(sock)} " \
-                         "failed to set accept_filter=#{name} (#{e.inspect})")
-          end
+        name = opt[:accept_filter]
+        name = DEFAULTS[:accept_filter] if nil == name
+        begin
+          sock.setsockopt(SOL_SOCKET, SO_ACCEPTFILTER, accf_arg(name))
+        rescue => e
+          logger.error("#{sock_name(sock)} " \
+                       "failed to set accept_filter=#{name} (#{e.inspect})")
         end
       end
     end