---
name: "libcurl-share"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/libcurl-share"
---

# libcurl-share(3)

how to use the share interface

## NAME

libcurl-share - how to use the share interface

## 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

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

## 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

You create a shared object with *[curl\_share\_init(3)](/curl_share_init/3.md)*. 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)](/curl_share_setopt/3.md)*.

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)](/curl_share_setopt/3.md)* too.

Then, you make an easy handle to use this share, you set the *[CURLOPT\_SHARE(3)](/CURLOPT_SHARE/3.md)* option with *[curl\_easy\_setopt(3)](/curl_easy_setopt/3.md)*, 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)](/CURLOPT_SHARE/3.md)* to NULL for that easy handle. To make a handle stop sharing a particular data, you can *[CURLSHOPT\_UNSHARE(3)](/CURLSHOPT_UNSHARE/3.md)* it.

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

## SEE ALSO

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