使用libcurl步骤1之curl_global_init

文章采集自互联网,仅做学习笔记使用

curl_global_init - 全局libcurl初始化

名称

curl_global_init - 全局libcurl初始化

概要

#include

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_ALL

尽可能初始化一切。这将设置除CURL_GLOBAL_ACK_EINTR之外的所有已知位。

 

CURL_GLOBAL_SSL

(自7.57.0以来,此标志的存在与否无效。下面的描述适用于较旧的libcurl版本。)

初始化SSL。

这里的含义是,如果未设置此位,则SSL层的初始化需要由应用程序完成,或者至少在libcurl之外完成。如何进行SSL初始化的确切过程取决于libcurl使用的TLS后端。

在没有初始化TLS层的情况下执行基于TLS的传输可能会导致意外行为。

CURL_GLOBAL_WIN32

初始化Win32套接字库。

这里的含义是,如果未设置此位,则winsock的初始化必须由应用程序完成,否则您将面临未定义行为的风险。当在libcurl之外处理初始化时存在此选项,因此libcurl不需要再次执行此操作。

CURL_GLOBAL_NOTHING

没有多余的初始化。这没有任何意义。

CURL_GLOBAL_DEFAULT

一个明智的默认。它将初始化SSL和Win32。现在,这等于CURL_GLOBAL_ALL掩码的功能。

CURL_GLOBAL_ACK_EINTR

设置此标志后,curl将在连接或等待数据时确认EINTR条件。否则,curl会等待直到完全超时。(在7.30.0中添加)

返回值

如果此函数返回非零,则出现错误,您无法使用其他curl函数。

 

使用libcurl步骤1之curl_global_init

使用libcurl步骤2之curl_easy_init

使用libcurl步骤3之curl_easy_setopt

使用libcurl步骤4之curl_easy_perform

使用libcurl步骤5之curl_easy_cleanup

你可能感兴趣的:(libcurl)