Является ли curl_easy_perform() синхронным или асинхронным?

Я использую curl для отправки запросов POST и GET, и я использую функции обратного вызова для получения ответов от этих запросов. Эти функции callback являются статическими функциями-членами, которые, в свою очередь, вызывают нестационарные функции-члены (вы не можете использовать нестатические функции-члены в curl напрямую, поэтому для этого обходного пути).

Поскольку эти функции обратного вызова не могут вернуть результат, я использую атрибут в моем классе С++ для хранения ответа. Все это прекрасно, но теперь мой вопрос. Делает ли блок curl_easy_perform() до тех пор, пока не будет отправлен весь запрос И ответ будет обработан функцией обратного вызова ИЛИ продолжит ли моя программа после curl_easy_perform() и будет ли она прервана каким-то образом, когда будет получен ответ от запроса?

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

Я понимаю, что мое объяснение не очень ясное, поэтому, если вы не понимаете, пожалуйста, дайте мне знать, и я попытаюсь перефразировать его.

Спасибо!

Ответ 1

Выполняется ли curl_easy_perform() до отправки всего запроса AND ответ обрабатывается функцией обратного вызова

Да, это именно то, что он делает.

(Если вы предпочитаете неблокирующее поведение, libcurl multi interface - это путь.)