about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-10-04 01:37:29 -0700
committerEric Wong <normalperson@yhbt.net>2009-10-04 01:37:29 -0700
commit552366ca8773c04047fb82ea2468c5c66d9df1d8 (patch)
tree7368f9c6f6285e4bbdfab66ca46f73cd592a6401 /lib
parent2760c0ee2c11a5b9125e5a07374f5fdd5a93282e (diff)
downloadrainbows-552366ca8773c04047fb82ea2468c5c66d9df1d8.tar.gz
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
Diffstat (limited to 'lib')
-rw-r--r--lib/rainbows/revactor.rb21
1 files 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