From 552366ca8773c04047fb82ea2468c5c66d9df1d8 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 4 Oct 2009 01:37:29 -0700 Subject: revactor: allow UNIX domain socket listeners Revactor may be gaining support for UNIX domain socket listeners soon, so factor out revactorize_listeners into its own method that can conditionally handle UNIX domain sockets if our Revactor version supports it. Patch for Revactor submitted here: http://rubyforge.org/pipermail/revactor-talk/2009-October/000035.html --- lib/rainbows/revactor.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/rainbows/revactor.rb b/lib/rainbows/revactor.rb index f602183..66a4ae3 100644 --- a/lib/rainbows/revactor.rb +++ b/lib/rainbows/revactor.rb @@ -18,7 +18,8 @@ module Rainbows buf = client.read or return # this probably does not happen... hp = HttpParser.new env = {} - remote_addr = client.remote_addr + remote_addr = ::Revactor::TCP::Socket === client ? + client.remote_addr : LOCALHOST begin while ! hp.headers(env, buf) @@ -69,10 +70,7 @@ module Rainbows Actor.current.trap_exit = true - listeners = LISTENERS.map do |s| - TCPServer === s ? ::Revactor::TCP.listen(s, nil) : nil - end.compact - + listeners = revactorize_listeners logger.info "worker=#{worker.nr} ready with Revactor" clients = [] @@ -113,5 +111,18 @@ module Rainbows client.close rescue nil end + def revactorize_listeners + LISTENERS.map do |s| + if TCPServer === s + ::Revactor::TCP.listen(s, nil) + elsif defined?(::Revactor::UNIX) && UNIXServer === s + ::Revactor::UNIX.listen(s) + else + logger.error "your version of Revactor can't handle #{s.inspect}" + nil + end + end.compact + end + end end -- cgit v1.2.3-24-ge0c7