class Coolio::Socket::Connector

Public Class Methods

new(coolio_socket, ruby_socket) click to toggle source
Calls superclass method Coolio::IOWatcher.new
# File lib/cool.io/socket.rb, line 59
def initialize(coolio_socket, ruby_socket)
  @coolio_socket, @ruby_socket = coolio_socket, ruby_socket
  super(ruby_socket, :w)
end

Public Instance Methods

on_writable() click to toggle source
# File lib/cool.io/socket.rb, line 64
def on_writable
  evl = evloop
  detach

  if connect_successful?
    @coolio_socket.instance_eval { @_connector = nil }
    @coolio_socket.attach(evl)
    @ruby_socket.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, [1].pack("l"))
    @ruby_socket.setsockopt(::Socket::SOL_SOCKET, ::Socket::SO_KEEPALIVE, true)

    @coolio_socket.__send__(:on_connect)
  else
    @coolio_socket.instance_eval { @_failed = true }
    @coolio_socket.__send__(:on_connect_failed)
  end
end

Private Instance Methods

connect_successful?() click to toggle source
# File lib/cool.io/socket.rb, line 85
def connect_successful?
  @ruby_socket.getsockopt(::Socket::SOL_SOCKET, ::Socket::SO_ERROR).unpack('i').first == 0
rescue IOError
  false
end