class EventMachine::Synchrony::TCPSocket
def new(*args)
def new(*args) if args.size == 1 _old_new(*args) else # In TCPSocket, new against an unknown hostname raises SocketError with # a message "getaddrinfo: nodename nor servname provided, or not known". # In EM, connect against an unknown hostname raises EM::ConnectionError # with a message of "unable to resolve server address" begin socket = EventMachine::connect(*args[0..1], self) rescue EventMachine::ConnectionError => e raise SocketError, e.message end # In TCPSocket, new against a closed port raises Errno::ECONNREFUSED. # In EM, connect against a closed port result in a call to unbind with # a reason param of Errno::ECONNREFUSED as a class, not an instance. unless socket.sync(:in) # wait for connection raise socket.unbind_reason.new if socket.unbind_reason.is_a? Class raise SocketError end socket end end