diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-06-30 17:47:55 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-07-08 14:49:31 -0700 |
commit | 98e77adbdcdd96d24c98fd098d9a046f152d6535 (patch) | |
tree | ad1aa11e6f8da75f0b265599dab4c16ac26768b4 | |
parent | 2fbbd59ea9b47e7bbf44ba848ac017905720c2fd (diff) | |
download | unicorn-98e77adbdcdd96d24c98fd098d9a046f152d6535.tar.gz |
This number of retries and delay taken directly from nginx (cherry picked from commit d247b5d95a3ad2de65cc909db21fdfbc6194b4c9)
-rw-r--r-- | lib/unicorn.rb | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/unicorn.rb b/lib/unicorn.rb index 7173a29..7acc00b 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -168,16 +168,23 @@ module Unicorn def listen(address, opt = {}.merge(@listener_opts[address] || {})) return if String === address && listener_names.include?(address) - if io = bind_listen(address, opt) + delay, tries = 0.5, 5 + begin + io = bind_listen(address, opt) unless TCPServer === io || UNIXServer === io IO_PURGATORY << io io = server_cast(io) end logger.info "listening on addr=#{sock_name(io)} fd=#{io.fileno}" LISTENERS << io - else + return io + rescue Errno::EADDRINUSE => err logger.error "adding listener failed addr=#{address} (in use)" - raise Errno::EADDRINUSE, address + raise err if tries == 0 + tries -= 1 + logger.error "retrying in #{delay} seconds (#{tries} tries left)" + sleep(delay) + retry end end |