libcurl-share(3) Library Functions Manual libcurl-share(3)

# [NAME](#NAME)

libcurl-share - how to use the share interface

# [DESCRIPTION](#DESCRIPTION)

This is an overview on how to use the libcurl share interface in your C programs. There are specific man pages for each function mentioned in here.

All functions in the share interface are prefixed with curl\_share.

# [OBJECTIVES](#OBJECTIVES)

The share interface was added to enable sharing of data between curl handles.

# [ONE SET OF DATA - MANY TRANSFERS](#ONE_SET_OF_DATA_-_MANY_TRANSFERS)

You can have multiple easy handles share data between them. Have them update and use the **same** cookie database, DNS cache, TLS session cache and/or connection cache. This way, each single transfer takes advantage from data updates made by the other transfer(s).

# [SHARE OBJECT](#SHARE_OBJECT)

You create a shared object with [*curl\_share\_init(3)*](/man/os/curl/curl_share_init.3). It returns a handle for a newly created one.

You tell the shared object what data you want it to share by using [*curl\_share\_setopt(3)*](/man/os/curl/curl_share_setopt.3).

Since you can use this share from multiple threads, and libcurl has no internal thread synchronization, you must provide mutex callbacks if you are using this multi-threaded. You set lock and unlock functions with [*curl\_share\_setopt(3)*](/man/os/curl/curl_share_setopt.3) too.

Then, you make an easy handle to use this share, you set the [*CURLOPT\_SHARE(3)*](/man/os/curl/CURLOPT_SHARE.3) option with [*curl\_easy\_setopt(3)*](/man/os/curl/curl_easy_setopt.3), and pass in share handle. You can make any number of easy handles share the same share handle.

To make an easy handle stop using that particular share, you set [*CURLOPT\_SHARE(3)*](/man/os/curl/CURLOPT_SHARE.3) to NULL for that easy handle. To make a handle stop sharing a particular data, you can [*CURLSHOPT\_UNSHARE(3)*](/man/os/curl/CURLSHOPT_UNSHARE.3) it.

When you are done using the share, make sure that no easy handle is still using it, and call [*curl\_share\_cleanup(3)*](/man/os/curl/curl_share_cleanup.3) on the handle.

# [SEE ALSO](#SEE_ALSO)

[**curl\_share\_cleanup**(3)](/man/os/curl/curl_share_cleanup.3), [**curl\_share\_init**(3)](/man/os/curl/curl_share_init.3), [**curl\_share\_setopt**(3)](/man/os/curl/curl_share_setopt.3), [**libcurl-easy**(3)](/man/os/curl/libcurl-easy.3), [**libcurl-errors**(3)](/man/os/curl/libcurl-errors.3), [**libcurl-multi**(3)](/man/os/curl/libcurl-multi.3)

2026-10-31 libcurl

---

Document: libcurl-share(3) from curl 8.23.0-r3 (Chainguard OS)
Source: https://github.com/curl/curl.git
