Для общения клиента с сервером использую библиотеку net. Клиент написан на С++ и использует обычные системные сокеты.
Передаю клиенту множество данных, в виде порций. Заметил, что сервер не дожидается момента, когда клиент получит данные и сразу же отправляет следующий пакет. Из-за этого клиент не обрабатывает задуманную порцию, а соединяет некоторые порции вместе.
Перед мной стал вопрос:
Как добиться того, что бы сервер ждал момента - когда пакет дойдет клиенту, и только тогда отправлять следующий пакет.
Прочитал немного про специфику сокетов, узнал что сокеты могут быть блокируемыми и не блокируемыми. То бишь на нативном уровне есть вроде флага TCP_NO_WAIT, который говорит о том, что не нужно ждать ответа о доставки данных, из-за чего не дожидаясь сразу отправляет следующую порцию.
Так вот, как сделать сокет блокируемым? Чтоб он дожидался ответа о доставки и только тогда отправлял следующий пакет.
> Из-за этого клиент не обрабатывает задуманную порцию, а соединяет некоторые порции вместе.
У вас проблема на клиенте. Сокет это такая труба в которую вталкиваются байтики с одной стороны, и выталкиваются с другой. Если ваш клиент неспособен различить 2 пакета в потоке байтиков, то это плохой клиент.