module Redis::Connection::SocketMixin

def write(buffer)

def write(buffer)
  return super(buffer) unless @write_timeout
  bytes_to_write = buffer.bytesize
  total_bytes_written = 0
  loop do
    case bytes_written = write_nonblock(buffer, exception: false)
    when :wait_readable
      unless wait_readable(@write_timeout)
        raise Redis::TimeoutError
      end
    when :wait_writable
      unless wait_writable(@write_timeout)
        raise Redis::TimeoutError
      end
    when nil
      raise Errno::ECONNRESET
    when Integer
      total_bytes_written += bytes_written
      if total_bytes_written >= bytes_to_write
        return total_bytes_written
      end
      buffer = buffer.byteslice(bytes_written..-1)
    end
  end
end