cURL CURLOPT_WRITEFUNCTION 是从同一个线程调用的吗?
Is cURL CURLOPT_WRITEFUNCTION called from same thread?
函数是否通过 CURLOPT_WRITEFUNCTION
从调用 curl_easy_perform()
的同一线程调用指定给 cURL?
void read_http()
{
curl_easy_setopt(CURLOPT_WRITEFUNCTION, on_write_data);
curl_easy_perform(hcurl);
}
回调就像
void on_write_data(buff, ...)
{
copy_to(buff, shared_buff);
}
客户端代码看起来像
read_http();
// use shared_buff
问题是什么时候 read_http()
returns 读取了所有 http 数据?还是仍在进行中?
是的。出于所有实际目的,libcurl 是单线程的,并且永远不会从您调用它的线程之外的任何其他线程进行回调。
libcurl 唯一会使用的其他线程(如果以这种方式构建)是用于名称解析的单独线程,但该线程永远不会执行任何回调或以其他方式对调用者或 API 可见。
函数是否通过 CURLOPT_WRITEFUNCTION
从调用 curl_easy_perform()
的同一线程调用指定给 cURL?
void read_http()
{
curl_easy_setopt(CURLOPT_WRITEFUNCTION, on_write_data);
curl_easy_perform(hcurl);
}
回调就像
void on_write_data(buff, ...)
{
copy_to(buff, shared_buff);
}
客户端代码看起来像
read_http();
// use shared_buff
问题是什么时候 read_http()
returns 读取了所有 http 数据?还是仍在进行中?
是的。出于所有实际目的,libcurl 是单线程的,并且永远不会从您调用它的线程之外的任何其他线程进行回调。
libcurl 唯一会使用的其他线程(如果以这种方式构建)是用于名称解析的单独线程,但该线程永远不会执行任何回调或以其他方式对调用者或 API 可见。