class Thin::SwiftiplyConnection

Public Instance Methods

connection_completed() click to toggle source
# File lib/thin/backends/swiftiply_client.rb, line 33
def connection_completed
  send_data swiftiply_handshake(@backend.key)
end
persistent?() click to toggle source
# File lib/thin/backends/swiftiply_client.rb, line 37
def persistent?
  true
end
unbind() click to toggle source
Calls superclass method
# File lib/thin/backends/swiftiply_client.rb, line 41
def unbind
  super
  EventMachine.add_timer(rand(2)) { reconnect(@backend.host, @backend.port) } if @backend.running?
end

Protected Instance Methods

host_ip() click to toggle source

For some reason Swiftiply request the current host

# File lib/thin/backends/swiftiply_client.rb, line 52
def host_ip
  begin
    if defined?(Addrinfo)
      # ruby 2.0+
      # TODO: ipv6 support here?
      Addrinfo.getaddrinfo(@backend.host, @backend.port, :PF_INET, :STREAM).first.ip_address.split('.').map(&:to_i)
    else
      Socket.gethostbyname(@backend.host)[3].unpack('CCCC')
    end
  rescue
    [0, 0, 0, 0]
  end
end
swiftiply_handshake(key) click to toggle source
# File lib/thin/backends/swiftiply_client.rb, line 47
def swiftiply_handshake(key)
  'swiftclient' << host_ip.collect { |x| sprintf('%02x', x.to_i) }.join << sprintf('%04x', @backend.port) << sprintf('%02x', key.length) << key
end