Вам следует прекратить использование неблокирующих портов. Они действительно наиболее полезны для параллелизма, и у вас есть темы для этого.
Просто заставьте каждый поток в команде ждать порта, и когда он разблокируется, у него будет что-то делать, чтобы вы не тратили время на вращение. Если у вас есть другие дела (например, обновить состояние игры), сделайте это с другими потоками, которые вообще не выполняют сетевой ввод-вывод.
И убедитесь, что вы используете примитивы синхронизации (семафоры), чтобы не потерять синхронизацию с самим собой.
Это супер многопоточный способ сделать это, и вы, вероятно, должны его использовать. Другой способ состоит в том, чтобы иметь конечный автомат продвижения шага блокировки, который обновляет циклический перебор всех клиентов. Это довольно бесполезно, если вы хотите играть через Интернет, так как различные звоны заставят вашу игру работать на разных скоростях.