@Override
  protected void doStop() throws Exception {
    if (LOG.isDebugEnabled()) LOG.debug("stopping - {}", this);

    if (getConnection() != null) {
      try {
        getConnection().close(StatusCode.SHUTDOWN, "Shutdown");
      } catch (Throwable t) {
        LOG.debug("During Connection Shutdown", t);
      }
    }
    super.doStop();
  }
  @Override
  protected void doStop() throws Exception {
    // Tell the acceptors we are stopping
    interruptAcceptors();

    // If we have a stop timeout
    long stopTimeout = getStopTimeout();
    if (stopTimeout > 0 && _stopping != null) _stopping.await(stopTimeout, TimeUnit.MILLISECONDS);
    _stopping = null;

    super.doStop();

    LOG.info("Stopped {}", this);
  }
  @Override
  protected void doStop() throws Exception {
    super.doStop();
    close(
        ErrorCode.NO_ERROR.code,
        "stop",
        new Callback() {
          @Override
          public void succeeded() {
            disconnect();
          }

          @Override
          public void failed(Throwable x) {
            disconnect();
          }

          @Override
          public InvocationType getInvocationType() {
            return InvocationType.NON_BLOCKING;
          }
        });
  }