DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

libcurl-thread(3)




libcurl-thread(3)     libcurl thread safety     libcurl-thread(3)


NAME

     libcurl-thread - libcurl thread safety


Multi-threading with libcurl

     libcurl is thread safe but has no internal thread synchroni-
     zation.  You may have to provide your own locking should you
     meet any of the thread safety exceptions below.

     Handles. You must never share the same  handle  in  multiple
     threads.  You can pass the handles around among threads, but
     you must never use a single handle from more than one thread
     at any given time.

     Shared objects. You can share certain data between  multiple
     handles  by  using  the share interface but you must provide
     your    own    locking    and    set    curl_share_setopt(3)
     CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC.


TLS

     If you are accessing HTTPS or FTPS URLs in a  multi-threaded
     manner,  you  are  then  of  course using the underlying SSL
     library multi-threaded and those libs might have  their  own
     requirements  on this issue.  You may need to provide one or
     two functions to allow it to function properly:

     OpenSSL
          OpenSSL 1.1.0 "can be  safely  used  in  multi-threaded
          applications  provided  that support for the underlying
          OS threading API is built-in."

          https://www.openssl.org/docs/manmaster/crypto/threads.html#DESCRIPTION

          OpenSSL <= 1.0.2 the user must set callbacks.

          https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION

          https://curl.haxx.se/libcurl/c/opensslthreadlock.html

     GnuTLS
          https://gnutls.org/manual/html_node/Thread-safety.html

     NSS  thread-safe already without anything required.

     PolarSSL
          Required actions unknown.

     yassl
          Required actions unknown.

     axTLS
          Required actions unknown.

libcurl 7.58.0    Last change: August 08, 2017                  1

libcurl-thread(3)     libcurl thread safety     libcurl-thread(3)

     Secure-Transport
          The engine is used by libcurl in a way  that  is  fully
          thread-safe.

     WinSSL
          The engine is used by libcurl in a way  that  is  fully
          thread-safe.

     wolfSSL
          The engine is used by libcurl in a way  that  is  fully
          thread-safe.

     BoringSSL
          The engine is used by libcurl in a way  that  is  fully
          thread-safe.


Other areas of caution

     Signals
          Signals are used for timing out name  resolves  (during
          DNS  lookup)  -  when built without using either the c-
          ares or threaded resolver backends. When using multiple
          threads  you  should set the CURLOPT_NOSIGNAL(3) option
          to 1L for all handles. Everything will  or  might  work
          fine  except  that  timeouts are not honored during the
          DNS lookup - which you can work around by building lib-
          curl  with  c-ares or threaded-resolver support. c-ares
          is a library that provides asynchronous name  resolves.
          On  some  platforms,  libcurl  simply will not function
          properly multi-threaded unless the  CURLOPT_NOSIGNAL(3)
          option is set.

     Name resolving
          gethostby* functions  and  other  system  calls.  These
          functions,  provided  by your operating system, must be
          thread safe. It is very important that libcurl can find
          and  use thread safe versions of these and other system
          calls, as otherwise  it  can't  function  fully  thread
          safe.  Some  operating systems are known to have faulty
          thread implementations.  We  have  previously  received
          problem reports on *BSD (at least in the past, they may
          be working fine these days).   Some  operating  systems
          that are known to have solid and working thread support
          are Linux, Solaris and Windows.

     curl_global_* functions
          These functions are not thread safe. If you  are  using
          libcurl  with  multiple threads it is especially impor-
          tant that before use you  call  curl_global_init(3)  or
          curl_global_init_mem(3)  to  explicitly  initialize the
          library and its dependents, rather  than  rely  on  the
          "lazy"  fail-safe  initialization  that takes place the
          first time curl_easy_init(3) is called. For an in-depth

libcurl 7.58.0    Last change: August 08, 2017                  2

libcurl-thread(3)     libcurl thread safety     libcurl-thread(3)

          explanation  refer  to  libcurl(3)  section GLOBAL CON-
          STANTS.

     Memory functions
          These functions, provided either by your operating sys-
          tem  or your own replacements, must be thread safe. You
          can  use  curl_global_init_mem(3)  to  set   your   own
          replacement memory functions.

     Non-safe functions
          CURLOPT_DNS_USE_GLOBAL_CACHE(3) is not thread-safe.

libcurl 7.58.0    Last change: August 08, 2017                  3


Man(1) output converted with man2html