module Redis::Connection::SocketMixin

def _read_from_socket(nbytes)

def _read_from_socket(nbytes)
  begin
    read_nonblock(nbytes)
  rescue *NBIO_READ_EXCEPTIONS
    if IO.select([self], nil, nil, @timeout)
      retry
    else
      raise Redis::TimeoutError
    end
  rescue *NBIO_WRITE_EXCEPTIONS
    if IO.select(nil, [self], nil, @timeout)
      retry
    else
      raise Redis::TimeoutError
    end
  end
rescue EOFError
  raise Errno::ECONNRESET
end