Все то, что функция send()
посылает на хост, может разделиться на несколько отдельных порций данных, на прочтение каждой из которых нужен отдельный вызов recv()
. Т.е. если я делаю так:
send("GET file.txt");
,то сообщение может разделиться на отдельные части, например:
"GE", "T fi", "le.txt"
,причем для прочтения каждой части нужен отдельный вызов recv()
.
С этим можно бороться, предварительно посылая пару байтов, в которых записан размер передаваемого сообщения. Тогда его можно будет легко прочитать по кусочкам в цикле.
НО: если принимаемое сообщение дробится, значит ли это, что при выполнении
send("GET file.txt");
выполнится
send("GET fi");
,при этом остальная часть сообщения отбросится для дальнейшей передачи? Иначе говоря, обязательна ли проверка числа отправленных байтов на передающем хосте и циклический вызов send()
для полной отправки сообщения? Или все же можно обойтись всего одним вызовом send()
и несколькими вызовами recv()
? И будут ли какие-то изменения в этом поведении, если я использую асинхронные сокеты?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Из литературы по С++ известны наименования библиотек (например, math)В линуксовском компиляторе gcc (а возможно и в g++) эта библиотека называется...
Пусть переменная типа double приводится к переменной типа floatЕсли переменная double хранит значение NaN, то оно преобразуется в NaN
Использую VLC SDK со статическими библиотеками, подгружаю вручную библиотеки libvlcdll, libvlccore
Привожу пример своего исходника по работе с Desktop Duplication API (на C++/CLI)К сожалению, не могу добиться от него результата - картинка получается пустая