Хочу понять как это правильно реализуется (теоретически).
Есть сервер, который принимает лишь запросы и отвечает на них (в идеале он сам может посылать данные).
Есть клиент, который открывает сокет и обменивается данными.
Сервер может обрабатывать несколько подключений. Если пришло новое подключение, то нужно создавать поток обработки. Либо обрабатывать в одном потоке все сетевые события. В первом случае нужно хранить пул потоков, во втором список дескрипторов (что лучше — не понятно).
Пусть теперь клиент открывает сокет. Запускает 2 потока: один — поток команд, а второй поток данных. Пусть оба потока посылают запрос.
Сервер отвечает. На что отвечает — данные или команды ? То есть ответы могут замешиваться и как это разруливается не совсем понятно.
А если сервер должен сам посылать команды, то тут вообще ничего не понятно...