code: public Timeout timeout(long timeout, TimeUnit unit) {
      if (timeout < 0) throw new IllegalArgumentException("timeout < 0: " + timeout);
      if (unit == null) throw new IllegalArgumentException("unit == null");
      this.timeoutNanos = unit.toNanos(timeout);
      return this;
    }
docs: Wait at most {@code timeout} time before aborting an operation. Using a
  per-operation timeout means that as long as forward progress is being made,
  no sequence of operations will fail.
  
  <p>If {@code timeout == 0}, operations will run indefinitely. (Operating
  system timeouts may still apply.)