文章采集自互联网,仅做学习笔记使用
curl_global_init - 全局libcurl初始化
名称
curl_global_init - 全局libcurl初始化
概要
#include <curl / curl.h>
CURLcode curl_global_init(长旗);
描述
此函数设置libcurl需要的程序环境。可以把它想象成库加载器的扩展。
在程序调用libcurl中的任何其他函数之前,必须在程序中至少调用此函数一次(程序是共享内存空间的所有代码)。它设置的环境对于程序的生命周期是恒定的,并且对于每个程序都是相同的,因此多个调用与一个调用具有相同的效果。
flags选项是一个位模式,它告诉libcurl到init的确切功能,如下所述。通过将值进行“或”运算来设置所需的位。在正常操作中,您必须指定CURL_GLOBAL_ALL。除非您熟悉它并且意味着控制libcurl的内部操作,否则不要使用任何其他值。
此功能不是线程安全的。当程序中的任何其他线程(即共享相同内存的线程)正在运行时,您不能调用它。这并不仅仅意味着没有其他使用libcurl的线程。因为curl_global_init调用类似线程不安全的其他库的函数,所以它可能与使用这些其他库的任何其他线程冲突。
如果要从Windows DLL初始化libcurl,则不应从DllMain或静态初始化程序初始化它,因为Windows在此期间保存加载程序锁定并且可能导致死锁。
有关如何使用此函数的详细信息,请参阅全局环境要求的libcurl中的说明。
FLAGS
尽可能初始化一切。这将设置除CURL_GLOBAL_ACK_EINTR之外的所有已知位。
(自7.57.0以来,此标志的存在与否无效。下面的描述适用于较旧的libcurl版本。)
初始化SSL。
这里的含义是,如果未设置此位,则SSL层的初始化需要由应用程序完成,或者至少在libcurl之外完成。如何进行SSL初始化的确切过程取决于libcurl使用的TLS后端。
在没有初始化TLS层的情况下执行基于TLS的传输可能会导致意外行为。
初始化Win32套接字库。
这里的含义是,如果未设置此位,则winsock的初始化必须由应用程序完成,否则您将面临未定义行为的风险。当在libcurl之外处理初始化时存在此选项,因此libcurl不需要再次执行此操作。
没有多余的初始化。这没有任何意义。
一个明智的默认。它将初始化SSL和Win32。现在,这等于CURL_GLOBAL_ALL掩码的功能。
设置此标志后,curl将在连接或等待数据时确认EINTR条件。否则,curl会等待直到完全超时。(在7.30.0中添加)
返回值
如果此函数返回非零,则出现错误,您无法使用其他curl函数。