docs: public void start(final boolean startPeerCleaningThread) throws IOException {
      logger.info("Starting BitTorrent tracker on {}...",
              getAnnounceUrl());
      connection = new SocketConnection(new ContainerServer(myTrackerServiceContainer));
  
      List<SocketAddress> tries = new ArrayList<SocketAddress>() {{
        try {
          add(new InetSocketAddress(InetAddress.getByAddress(new byte[4]), myPort));
        } catch (Exception ex) {
        }
        try {
          add(new InetSocketAddress(InetAddress.getLocalHost(), myPort));
        } catch (Exception ex) {
        }
        try {
          add(new InetSocketAddress(InetAddress.getByName(new URL(getAnnounceUrl()).getHost()), myPort));
        } catch (Exception ex) {
        }
      }};
  
      boolean started = false;
      for (SocketAddress address : tries) {
        try {
          if ((myBoundAddress = connection.connect(address)) != null) {
            logger.info("Started torrent tracker on {}", address);
            started = true;
            break;
          }
        } catch (IOException ioe) {
          logger.info("Can't start the tracker using address{} : ", address.toString(), ioe.getMessage());
        }
      }
      if (!started) {
        logger.error("Cannot start tracker on port {}. Stopping now...", myPort);
        stop();
        return;
      }
      if (startPeerCleaningThread) {
        if (myPeerCollectorThread == null || !myPeerCollectorThread.isAlive() || myPeerCollectorThread.getState() != Thread.State.NEW) {
          myPeerCollectorThread = new PeerCollectorThread(myTorrentsRepository);
        }
  
        myPeerCollectorThread.setName("peer-peerCollectorThread:" + myPort);
        myPeerCollectorThread.start();
      }
    }