code: public final ChannelFuture spliceTo(final AbstractEpollStreamChannel ch, final int len,
                                          final ChannelPromise promise) {
          if (ch.eventLoop() != eventLoop()) {
              throw new IllegalArgumentException("EventLoops are not the same.");
          }
          checkPositiveOrZero(len, "len");
          if (ch.config().getEpollMode() != EpollMode.LEVEL_TRIGGERED
                  || config().getEpollMode() != EpollMode.LEVEL_TRIGGERED) {
              throw new IllegalStateException("spliceTo() supported only when using " + EpollMode.LEVEL_TRIGGERED);
          }
          checkNotNull(promise, "promise");
          if (!isOpen()) {
              promise.tryFailure(SPLICE_TO_CLOSED_CHANNEL_EXCEPTION);
          } else {
              addToSpliceQueue(new SpliceInChannelTask(ch, len, promise));
              failSpliceIfClosed(promise);
          }
          return promise;
      }
docs: Splice from this {@link AbstractEpollStreamChannel} to another {@link AbstractEpollStreamChannel}.
  The {@code len} is the number of bytes to splice. If using {@link Integer#MAX_VALUE} it will
  splice until the {@link ChannelFuture} was canceled or it was failed.
  
  Please note:
  <ul>
  <li>both channels need to be registered to the same {@link EventLoop}, otherwise an
  {@link IllegalArgumentException} is thrown. </li>
  <li>{@link EpollChannelConfig#getEpollMode()} must be {@link EpollMode#LEVEL_TRIGGERED} for this and the
  target {@link AbstractEpollStreamChannel}</li>
  </ul>