private void startAcceptorThread() {
    if (acceptorThread != null) {
      logger.warning("SocketAcceptor thread is already live! Shutting down old acceptor...");
      acceptorThread.shutdown();
      acceptorThread = null;
    }

    acceptorThread =
        new SocketAcceptorThread(
            ioService.getThreadGroup(),
            ioService.getThreadPrefix() + "Acceptor",
            serverSocketChannel,
            this);
    acceptorThread.start();
  }
  @Override
  public synchronized void stop() {
    if (!live) {
      return;
    }
    live = false;
    logger.finest("Stopping ConnectionManager");

    if (acceptorThread != null) {
      acceptorThread.shutdown();
    }

    for (SocketChannelWrapper socketChannel : acceptedSockets) {
      closeResource(socketChannel);
    }
    for (Connection conn : connectionsMap.values()) {
      destroySilently(conn);
    }
    for (TcpIpConnection conn : activeConnections) {
      destroySilently(conn);
    }
    ioThreadingModel.shutdown();
    acceptedSockets.clear();
    connectionsInProgress.clear();
    connectionsMap.clear();
    monitors.clear();
    activeConnections.clear();
  }
 @Override
 public synchronized void shutdown() {
   if (acceptorThread != null) {
     acceptorThread.shutdown();
   }
   closeServerSocket();
   stop();
   connectionListeners.clear();
 }