class Volt::SocketWithTimeout

Public Class Methods

new(host, port, timeout=nil) click to toggle source
# File lib/volt/server/message_bus/peer_to_peer/socket_with_timeout.rb, line 8
def self.new(host, port, timeout=nil)
  if RUBY_PLATFORM == 'java'
    TCPSocket.new(host, port)
  else
    addr = Socket.getaddrinfo(host, nil)
    sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)

    if timeout
      secs = Integer(timeout)
      usecs = Integer((timeout - secs) * 1_000_000)
      optval = [secs, usecs].pack("l_2")
      sock.setsockopt Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, optval
      sock.setsockopt Socket::SOL_SOCKET, Socket::SO_SNDTIMEO, optval
    end
    sock.connect(Socket.pack_sockaddr_in(port, addr[0][3]))
    sock
  end
end