select
ровно в одном потоке. main
должен стоять знак точки с запятой?board[move] = EMPTY;
должно выполняться только если !found
. Но, вероятнее всего в этом коде только проба шага и анализ на выигрыш, а фактический шаг должен делаться в коде дальше по тексту книги. C++ использует манглинг для имен для поддержки классов, перегрузок, шаблонов.
У тебя сокеты должны быть одноранговыми. Этапов в приложении не должно быть.
Сейчас у тебя сперва этап прослушивания и соединения, а следом - этап взаимодействия. Это должны быть не этапы, а независимые друг от друга реакции на состояние сокетов.
Если в прослушивающем сокете есть запросы на соединение, должна запуститься функция установки соединения и добавления новой сессии в список сессий.
Если на сокете соединения есть что прочитать, должна запуститься функция сетевой коммуникации, которая вычитает трафик в циклический буфер и разберет его на пакеты/команды с последующим запуском уже их обработчиков.
Сессии у тебя могут быть разные. Чат-сессия, файловая сессия, голосовая сессия, передача видео и так далее. Соответственно и обработчики трафика в рамках сессии тоже могут быть разные. А могут быть и одинаковые, если ты правильно поймешь модель OSI. И в любой момент времени у тебя получится так, что сразу несколько сокетов будут иметь доступный входящий трафик. И ты уже сразу будешь знать какие обработчики каких сессий нужно вызвать.
Понятно тебе станет и то, как на базе сокетов реализовать модель вытесняющего взаимодействия. А следом ты сможешь разобраться и с тем, как с одного потока дальше перейти к пулу потоков со все той же моделью вытеснения.
Только не спрашивай как это все сделать. Читай книги. Тут обитает очень много людей, каждый из которых расскажет тебе что и как надо делать. Но сам ты так и не сможешь понять причин почему делать надо именно так, пока не изучишь самые основы самостоятельно.
В книге Снейдера есть ссылки на книги Стивенса и Комера. В этих книгах уже столько подробностей по сетевым коммуникациям, что мне и сказать будет уже нечего. Вообще у Снейдера очень богатый список дополнительной литературы. Для сетевого программиста это очень важная книга.