public void run() throws IOException {
	  
	//Setup Logging environment

	FileHandler file = new FileHandler(config.serverLog);
	file.setFormatter(new SimpleFormatter());
	LOG.setLevel(Level.INFO);
	LOG.addHandler(file);
    
	// create server socket and set timeout to 0
	ServerSocket ss = new ServerSocket(config.port, 0, InetAddress.getByName("0.0.0.0"));
	ss.setSoTimeout(0);
	
	LOG.info("Server running on port: " + config.port);
	
	// create new client
	Client client = new Client(ss, RECV_BUF_LEN, pluginManager, LOG);
	
	// while client is accepting create new client thread for the client
	while(client.accepting) {
		if(client.canAuthenticate(config.authentication)) {
			this.clients.add(client);
			(new ClientThread(client)).start();
		} else {
			client.close(); // close connection to client because it can't authenticate
		}
		client = new Client(ss, RECV_BUF_LEN, pluginManager, LOG); // create new client
	}
    
  }