lib/celluloid/io/unix_server.rb in celluloid-io-0.17.2 vs lib/celluloid/io/unix_server.rb in celluloid-io-0.17.3

- old
+ new

@@ -1,42 +1,50 @@ require 'socket' module Celluloid module IO # UNIXServer with combined blocking and evented support - class UNIXServer + class UNIXServer < Socket extend Forwardable - def_delegators :@server, :listen, :sysaccept, :close, :closed? + def_delegators :to_io, :listen, :sysaccept def self.open(socket_path) self.new(socket_path) end - def initialize(socket_path) - begin - @server = ::UNIXServer.new(socket_path) - rescue => ex - # Translate the EADDRINUSE jRuby exception. - raise unless RUBY_PLATFORM == 'java' - if ex.class.name == "IOError" && # Won't agree to .is_a?(IOError) - ex.message.include?("in use") - raise Errno::EADDRINUSE.new(ex.message) + # @overload initialize(socket_path) + # @param socket_path [String] + # + # @overload initialize(socket) + # @param socket [::UNIXServer] + def initialize(socket) + if socket.kind_of? ::BasicSocket + # socket + fail ArgumentError, "wrong kind of socket (#{socket.class} for UNIXServer)" unless socket.kind_of? ::UNIXServer + super(socket) + else + begin + super(::UNIXServer.new(socket)) + rescue => ex + # Translate the EADDRINUSE jRuby exception. + raise unless RUBY_PLATFORM == 'java' + if ex.class.name == "IOError" && # Won't agree to .is_a?(IOError) + ex.message.include?("in use") + raise Errno::EADDRINUSE.new(ex.message) + end + raise end - raise end end def accept - Celluloid::IO.wait_readable(@server) + Celluloid::IO.wait_readable(to_io) accept_nonblock end def accept_nonblock - Celluloid::IO::UNIXSocket.new(@server.accept_nonblock) + Celluloid::IO::UNIXSocket.new(to_io.accept_nonblock) end - def to_io - @server - end end end end