public boolean start() {

		if (socketExchanger == null) {
			log.error("A socket-exchanger is required.");
		}
		if (serverSocket == null && !openSocketServer()) {
			return false;
		}
		int initWorkers = socketExchanger.minWorkers;
		if (initWorkers < 1) initWorkers = 1;
		boolean initError = false;
		try {
			for (int i = 0; i < initWorkers; i++) 
				socketExchanger.execute(socketExchanger.getWorker(null), true);
		} catch (Exception e) {
			initError = true;
			log.error("Failed to instantiate a socket worker.", e);
		} finally {
			if (initError) closeServerSocket();
		}
		if (initError) return false;
		socketExchanger.execute(this, false);
		return true;
	}