В частности, у меня есть такой код:
Код: Выделить всё
// these are user-provided, I don't control these:
void* buf1;
size_t len1;
void* buf2;
size_t len2;
void* buf3;
size_t len3;
// I control this call sequence:
if (send(sck, buf1, len1, 0) < 0 ||
send(sck, buf2, len2, 0) < 0 ||
send(sck, buf3, len3, 0) < 0) {
...
}
Это можно сделать, создав промежуточный буфер, а затем все вызовы отправки, я мог бы затем вручную отправить этот буфер, но мне бы хотелось избежать создания промежуточного буфера, поскольку некоторые данные могут быть довольно большими и для этого потребуется дополнительная копия этих данных. Другими словами, я хочу отправить данные без копирования. Возможно ли это?
Примечание. Я знаю, что TCP не является пакетным протоколом. Я поискал и нашел ряд ответов, которые дают такой педантичный ответ, что пакеты на самом деле не существуют, и хотя это, возможно, семантически верно, это не особенно полезно, потому что под ними все еще есть IP-пакеты.
Подробнее здесь: https://stackoverflow.com/questions/790 ... tcp-packet
Мобильная версия