libcurl - опция CURLOPT_WRITEFUNCTION

Позвольте несколько вопросов по опции licurl: CURLOPT_WRITEFUNCTION, которая устанавливает обратный вызов функции при приемке новых данных и по нескольким дополнительным смежным опциям.

1) Вопрос по CURLOPT_WRITEFUNCTION:----->

В документации сказано:

Функция обратного вызова будет передавать как можно больше данных при всех вызовах, но вы не должны делать никаких предположений. Это может быть один байт, а может быть и тысячи. Максимальный объем данных тела, который будет передан функции обратного вызова записи, определен в файле заголовка curl.h : CURL_MAX_WRITE_SIZE (обычное значение по умолчанию - 16 КБ). Если CURLOPT_HEADER включен, что позволяет передавать данные заголовка в обратный вызов записи, вы можете получить до CURL_MAX_HTTP_HEADER байтов данных заголовка, переданных в него. Обычно это означает 100К.

-Под 100К - имеется ввиду все тот же размер данных за один приход ? -Написано, что "Если CURLOPT_HEADER включен, то позволяет ... 100К". Однако в документации к CURLOPT_HEADER сказано, что не опция CURLOPT_HEADER поддерживает 100K, а опция обратного вызова для заголовков CURLOPT_HEADERFUNCTION поддерживает 100K. Это небольшая неточность в документации ?

2) Вопрос по CURLOPT_HEADER:----->

Далее: обратный вызов CURLOPT_WRITEFUNCTION ограничен только получением максимального количества переданных ему байтов CURL_MAX_WRITE_SIZE (16 КБ), в то время как заголовок может быть длиннее, а CURLOPT_HEADERFUNCTION поддерживает вызов с заголовками до CURL_MAX_HTTP_HEADER bytes (100KBB).

-Подскажите, тут имеется ввиду, то, то заголовок может быть более 16K и его получение просто займет больше вызовов обратной функции CURLOPT_WRITEFUNCTION ? То есть грубо говоря ничего потеряно не будет, просто call-back будет вызываться чаще, так как принимает более маленькими порциями ?

3) И еще один вопрос по опции CURLOPT_WRITEFUNCTION:

Эта функция может быть вызвана с нулевыми байтами данных, если переданный файл пуст. Данные, передаваемые в эту функцию, не будут завершаться нулевым символом в конце!

Не могу понять, что это может значит ? Зачем эта функция может быть вызвана с нулевым байтом данных и как на это реагировать ?

В чистых сокетах или портах завершения Windows, если функция WSARecv вызывалась с нулевыми данными - это значило, что соединение разварено со стороны севера. Тут то же самое или что то другое ? Главный вопрос, как на это нужно реагировать ?


Ответы (0 шт):