class RedisClient::RubyConnection::BufferedIO

def write(string)

def write(string)
  total = remaining = string.bytesize
  loop do
    case bytes_written = @io.write_nonblock(string, exception: false)
    when Integer
      remaining -= bytes_written
      if remaining > 0
        string = string.byteslice(bytes_written..-1)
      else
        return total
      end
    when :wait_readable
      @io.to_io.wait_readable(@read_timeout) or raise(ReadTimeoutError, "Waited #{@read_timeout} seconds")
    when :wait_writable
      @io.to_io.wait_writable(@write_timeout) or raise(WriteTimeoutError, "Waited #{@write_timeout} seconds")
    when nil
      raise Errno::ECONNRESET
    else
      raise "Unexpected `write_nonblock` return: #{bytes.inspect}"
    end
  end
end