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 вызывалась с нулевыми данными - это значило, что соединение разварено со стороны севера. Тут то же самое или что то другое ? Главный вопрос, как на это нужно реагировать ?