about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-02-09 20:40:27 -0800
committerEric Wong <normalperson@yhbt.net>2009-02-09 20:40:27 -0800
commit07e2f413ab891306d3cdd8e49d0b13acc5e4f679 (patch)
tree8a56eaf5b5836957c5c84e6f071c32c0d892e7e8 /lib
parenta2dfa810e75d2618916aebf77078037bcb2204c6 (diff)
downloadunicorn-07e2f413ab891306d3cdd8e49d0b13acc5e4f679.tar.gz
We may have stale UNIX sockets leftover since we don't clean
those up at_exit.  So unlink them if we didn't inherit one.
Diffstat (limited to 'lib')
-rw-r--r--lib/unicorn/socket.rb11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/unicorn/socket.rb b/lib/unicorn/socket.rb
index cba921f..60d4bf4 100644
--- a/lib/unicorn/socket.rb
+++ b/lib/unicorn/socket.rb
@@ -69,6 +69,17 @@ module Unicorn
       return address if address.kind_of?(Socket)
 
       domain, bind_addr = if address[0..0] == "/"
+        if File.exist?(address)
+          if File.socket?(address)
+            if self.respond_to?(:logger)
+              logger.info "unlinking existing socket=#{address}"
+            end
+            File.unlink(address)
+          else
+            raise ArgumentError,
+                  "socket=#{address} specified but it is not a socket!"
+          end
+        end
         [ AF_UNIX, Socket.pack_sockaddr_un(address) ]
       elsif address =~ /^(\d+\.\d+\.\d+\.\d+):(\d+)$/
         [ AF_INET, Socket.pack_sockaddr_in($2.to_i, $1) ]