# File lib/hiredis/ruby/connection.rb, line 143 def _connect_sockaddr(af, sockaddr, timeout) sock = Socket.new(af, Socket::SOCK_STREAM, 0) begin sock.connect_nonblock(sockaddr) rescue Errno::EINPROGRESS if IO.select(nil, [sock], nil, timeout) # Writable, check for errors optval = sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR) errno = optval.unpack("i").first # Raise socket error if there is any raise self.class.errno_to_class[errno] if errno > 0 else # Timeout (TODO: replace with own Timeout class) raise Errno::ETIMEDOUT end end sock rescue sock.close if sock # Re-raise raise end