class Excon::Socket

def readline

def readline
  return legacy_readline if RUBY_VERSION.to_f <= 1.8_7
  buffer = String.new
  begin
    buffer << @socket.read_nonblock(1) while buffer[-1] != "\n"
    buffer
  rescue Errno::EAGAIN, Errno::EWOULDBLOCK, IO::WaitReadable
    select_with_timeout(@socket, :read) && retry
  rescue OpenSSL::SSL::SSLError => error
    if error.message == 'read would block'
      select_with_timeout(@socket, :read) && retry
    else
      raise(error)
    end
  end
end