code: public void stop() throws InterruptedException
      {
          synchronized (this)
          {
              // Signal that we are stopping
              _running = false;
  
              // Close the listener socket.
              if (log.isDebugEnabled()) log.debug("closing " + _listen);
              try
              {
                  if (_listen != null) _listen.close();
                  _listen=null;
              }
              catch (IOException e)
              {
                  log.warn(LogSupport.EXCEPTION, e);
              }
  
              // Do we have an acceptor thread (running or not)
              Thread.yield();
              for (int a = 0; _acceptor!=null && a<_acceptor.length; a++)
              {
                  Acceptor acc = _acceptor[a];
                  if (acc != null) 
                      acc.interrupt();
              }
              Thread.sleep(100);
  
              for (int a = 0; _acceptor!=null && a<_acceptor.length; a++)
              {
                  Acceptor acc = _acceptor[a];
  
                  if (acc != null)
                  {
                      acc.forceStop();
                      _acceptor[a] = null;
                  }
              }
          }
  
          // Stop the thread pool
          try
          {
              super.stop();
          }
          catch (Exception e)
          {
              log.warn(LogSupport.EXCEPTION, e);
          }
          finally
          {
              synchronized (this)
              {
                  _acceptor = null;
              }
          }
      }
docs: /* ---------------------------------------------------------------