docs: public IAsyncFuture write(ByteBuffer[] bufs, long timeout,
                                boolean forceQueue, long bytesRequested, VirtualConnection vci,
                                boolean asyncIO) {
          if (timeout < 0) {
              throw new IllegalArgumentException();
          }
  
          IAsyncFuture future = write(bufs, forceQueue, bytesRequested,
                                      vci, asyncIO);
  
          // don't lock the getCompletedSemaphore here, wait till later
          if (future != null && !future.isCompleted() && timeout > 0) {
              createTimeout(future, timeout, false);
          }
          return future;
      }