Разделение потока на порции данных

190
12 августа 2017, 03:50

Все то, что функция send() посылает на хост, может разделиться на несколько отдельных порций данных, на прочтение каждой из которых нужен отдельный вызов recv(). Т.е. если я делаю так:

send("GET file.txt");

,то сообщение может разделиться на отдельные части, например:

"GE", "T fi", "le.txt"

,причем для прочтения каждой части нужен отдельный вызов recv(). С этим можно бороться, предварительно посылая пару байтов, в которых записан размер передаваемого сообщения. Тогда его можно будет легко прочитать по кусочкам в цикле. НО: если принимаемое сообщение дробится, значит ли это, что при выполнении

send("GET file.txt");

выполнится

send("GET fi");

,при этом остальная часть сообщения отбросится для дальнейшей передачи? Иначе говоря, обязательна ли проверка числа отправленных байтов на передающем хосте и циклический вызов send() для полной отправки сообщения? Или все же можно обойтись всего одним вызовом send() и несколькими вызовами recv()? И будут ли какие-то изменения в этом поведении, если я использую асинхронные сокеты?

READ ALSO
Имена библиотек gcc

Имена библиотек gcc

Из литературы по С++ известны наименования библиотек (например, math)В линуксовском компиляторе gcc (а возможно и в g++) эта библиотека называется...

293
Приведение double к float в C++

Приведение double к float в C++

Пусть переменная типа double приводится к переменной типа floatЕсли переменная double хранит значение NaN, то оно преобразуется в NaN

345
libVLC Нужно ли вручную загружать библиотеки?

libVLC Нужно ли вручную загружать библиотеки?

Использую VLC SDK со статическими библиотеками, подгружаю вручную библиотеки libvlcdll, libvlccore

270
Использование Desktop Duplication API

Использование Desktop Duplication API

Привожу пример своего исходника по работе с Desktop Duplication API (на C++/CLI)К сожалению, не могу добиться от него результата - картинка получается пустая

417