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