2024-01-17 18:32:44 +08:00
|
|
|
---
|
2024-02-28 18:28:10 +08:00
|
|
|
c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
2024-01-17 18:32:44 +08:00
|
|
|
SPDX-License-Identifier: curl
|
|
|
|
Title: curl_global_init
|
|
|
|
Section: 3
|
|
|
|
Source: libcurl
|
|
|
|
See-also:
|
|
|
|
- curl_easy_init (3)
|
|
|
|
- curl_global_cleanup (3)
|
|
|
|
- curl_global_init_mem (3)
|
|
|
|
- curl_global_sslset (3)
|
|
|
|
- curl_global_trace (3)
|
|
|
|
- libcurl (3)
|
2024-03-21 18:50:20 +08:00
|
|
|
Protocol:
|
2024-03-23 06:48:54 +08:00
|
|
|
- All
|
2024-01-17 18:32:44 +08:00
|
|
|
---
|
|
|
|
|
|
|
|
# NAME
|
|
|
|
|
2022-04-05 19:32:26 +08:00
|
|
|
curl_global_init - Global libcurl initialization
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
# SYNOPSIS
|
|
|
|
|
|
|
|
~~~c
|
2021-11-26 21:20:18 +08:00
|
|
|
#include <curl/curl.h>
|
|
|
|
|
|
|
|
CURLcode curl_global_init(long flags);
|
2024-01-17 18:32:44 +08:00
|
|
|
~~~
|
|
|
|
|
|
|
|
# DESCRIPTION
|
|
|
|
|
2021-11-26 15:46:59 +08:00
|
|
|
This function sets up the program environment that libcurl needs. Think of it
|
2006-07-27 06:19:42 +08:00
|
|
|
as an extension of the library loader.
|
2002-03-04 18:09:48 +08:00
|
|
|
|
2006-07-27 06:19:42 +08:00
|
|
|
This function must be called at least once within a program (a program is all
|
|
|
|
the code that shares a memory space) before the program calls any other
|
2021-11-26 15:46:59 +08:00
|
|
|
function in libcurl. The environment it sets up is constant for the life of
|
2006-07-27 06:19:42 +08:00
|
|
|
the program and is the same for every program, so multiple calls have the same
|
|
|
|
effect as one call.
|
2002-03-04 18:09:48 +08:00
|
|
|
|
2006-01-16 07:55:53 +08:00
|
|
|
The flags option is a bit pattern that tells libcurl exactly what features to
|
2002-03-04 18:09:48 +08:00
|
|
|
init, as described below. Set the desired bits by ORing the values together.
|
2021-11-26 15:46:59 +08:00
|
|
|
In normal operation, you must specify CURL_GLOBAL_ALL. Do not use any other
|
2021-10-31 23:34:44 +08:00
|
|
|
value unless you are familiar with it and mean to control internal operations
|
|
|
|
of libcurl.
|
2002-03-04 18:09:48 +08:00
|
|
|
|
2022-06-07 23:12:52 +08:00
|
|
|
This function is thread-safe since libcurl 7.84.0 if
|
2024-01-17 18:32:44 +08:00
|
|
|
curl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set
|
2022-06-07 23:12:52 +08:00
|
|
|
(most platforms).
|
|
|
|
|
|
|
|
If this is not thread-safe, you must not call this function when any other
|
2006-07-27 06:19:42 +08:00
|
|
|
thread in the program (i.e. a thread sharing the same memory) is running.
|
2021-11-26 15:46:59 +08:00
|
|
|
This does not just mean no other thread that is using libcurl. Because
|
2024-01-17 18:32:44 +08:00
|
|
|
curl_global_init(3) calls functions of other libraries that are
|
2014-10-24 15:08:22 +08:00
|
|
|
similarly thread unsafe, it could conflict with any other thread that uses
|
2022-06-08 15:02:51 +08:00
|
|
|
these other libraries.
|
|
|
|
|
2022-09-21 05:30:19 +08:00
|
|
|
If you are initializing libcurl from a Windows DLL you should not initialize
|
2024-01-17 18:32:44 +08:00
|
|
|
it from *DllMain* or a static initializer because Windows holds the loader
|
2022-09-21 05:30:19 +08:00
|
|
|
lock during that time and it could cause a deadlock.
|
2016-01-05 06:44:39 +08:00
|
|
|
|
2024-01-17 18:32:44 +08:00
|
|
|
See the description in libcurl(3) of global environment requirements for
|
2006-07-27 06:19:42 +08:00
|
|
|
details of how to use this function.
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
# FLAGS
|
|
|
|
|
|
|
|
## CURL_GLOBAL_ALL
|
|
|
|
|
2013-04-05 19:13:26 +08:00
|
|
|
Initialize everything possible. This sets all known bits except
|
2024-01-17 18:32:44 +08:00
|
|
|
**CURL_GLOBAL_ACK_EINTR**.
|
|
|
|
|
|
|
|
## CURL_GLOBAL_SSL
|
2016-06-29 22:00:46 +08:00
|
|
|
|
2018-01-24 19:13:51 +08:00
|
|
|
(This flag's presence or absence serves no meaning since 7.57.0. The
|
2017-11-24 00:02:48 +08:00
|
|
|
description below is for older libcurl versions.)
|
|
|
|
|
2016-06-29 21:57:44 +08:00
|
|
|
Initialize SSL.
|
|
|
|
|
|
|
|
The implication here is that if this bit is not set, the initialization of the
|
|
|
|
SSL layer needs to be done by the application or at least outside of
|
2018-04-18 03:17:57 +08:00
|
|
|
libcurl. The exact procedure how to do SSL initialization depends on the TLS
|
2016-06-29 21:57:44 +08:00
|
|
|
backend libcurl uses.
|
|
|
|
|
|
|
|
Doing TLS based transfers without having the TLS layer initialized may lead to
|
|
|
|
unexpected behaviors.
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
## CURL_GLOBAL_WIN32
|
|
|
|
|
2004-02-27 23:34:06 +08:00
|
|
|
Initialize the Win32 socket libraries.
|
2016-06-29 21:57:44 +08:00
|
|
|
|
|
|
|
The implication here is that if this bit is not set, the initialization of
|
|
|
|
winsock has to be done by the application or you risk getting undefined
|
|
|
|
behaviors. This option exists for when the initialization is handled outside
|
2023-08-22 23:40:39 +08:00
|
|
|
of libcurl so there is no need for libcurl to do it again.
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
## CURL_GLOBAL_NOTHING
|
|
|
|
|
2022-09-21 05:30:19 +08:00
|
|
|
Initialize nothing extra. This sets no bit.
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
## CURL_GLOBAL_DEFAULT
|
|
|
|
|
2023-08-22 23:40:39 +08:00
|
|
|
A sensible default. It initializes both SSL and Win32. Right now, this equals
|
2024-01-17 18:32:44 +08:00
|
|
|
the functionality of the **CURL_GLOBAL_ALL** mask.
|
|
|
|
|
|
|
|
## CURL_GLOBAL_ACK_EINTR
|
|
|
|
|
2020-01-23 20:39:27 +08:00
|
|
|
This bit has no point since 7.69.0 but its behavior is instead the default.
|
|
|
|
|
2023-08-22 23:40:39 +08:00
|
|
|
Before 7.69.0: when this flag is set, curl acknowledges EINTR condition when
|
|
|
|
connecting or when waiting for data. Otherwise, curl waits until full timeout
|
|
|
|
elapses. (Added in 7.30.0)
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
# EXAMPLE
|
|
|
|
|
|
|
|
~~~c
|
2023-12-04 17:50:42 +08:00
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
2021-10-25 14:54:08 +08:00
|
|
|
|
2023-12-04 17:50:42 +08:00
|
|
|
/* use libcurl, then before exiting... */
|
2021-10-25 14:54:08 +08:00
|
|
|
|
2023-12-04 17:50:42 +08:00
|
|
|
curl_global_cleanup();
|
|
|
|
}
|
2024-01-17 18:32:44 +08:00
|
|
|
~~~
|
|
|
|
|
|
|
|
# AVAILABILITY
|
|
|
|
|
2021-10-25 14:54:08 +08:00
|
|
|
Added in 7.8
|
2024-01-17 18:32:44 +08:00
|
|
|
|
|
|
|
# RETURN VALUE
|
|
|
|
|
2002-03-04 18:09:48 +08:00
|
|
|
If this function returns non-zero, something went wrong and you cannot use the
|
|
|
|
other curl functions.
|