class Redis::Connection::TCPSocket
def self.connect(host, port, timeout)
def self.connect(host, port, timeout) Timeout.timeout(timeout) do sock = new(host, port) sock end rescue Timeout::Error raise TimeoutError end
def self.connect(host, port, timeout)
def self.connect(host, port, timeout) # Limit lookup to IPv4, as Redis doesn't yet do IPv6... addr = ::Socket.getaddrinfo(host, nil, Socket::AF_INET) sock = new(::Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0) sockaddr = ::Socket.pack_sockaddr_in(port, addr[0][3]) begin sock.connect_nonblock(sockaddr) rescue Errno::EINPROGRESS if IO.select(nil, [sock], nil, timeout) == nil raise TimeoutError end begin sock.connect_nonblock(sockaddr) rescue Errno::EISCONN end end sock end