public static void exit(final int iIn)
	{
		if (! Ezim.running) return;

		Ezim.running = false;

		EzimNetwork.thAckTaker.interrupt();
		EzimAckTaker.getInstance().closeSocket();
		EzimNetwork.thDtxTaker.interrupt();
		EzimDtxTaker.getInstance().closeSocket();

		EzimThreadPool etpTmp = EzimThreadPool.getInstance();

		// acknowledge other peers we're going offline
		EzimAckSender easOff = new EzimAckSender
		(
			EzimAckSemantics.offline()
		);
		etpTmp.execute(easOff);

		etpTmp.shutdown();

		try
		{
			etpTmp.awaitTermination(EzimNetwork.exitTimeout, TimeUnit.SECONDS);
		}
		catch(InterruptedException ie)
		{
			EzimLogger.getInstance().warning(ie.getMessage(), ie);
		}

		if (! Ezim.shutdown) System.exit(iIn);
	}