---
name: "CURLOPT_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/CURLOPT_SHARE"
---

# CURLOPT\_SHARE(3)

share handle to use

## NAME

CURLOPT\_SHARE - share handle to use

## SYNOPSIS

```
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share);
```

## DESCRIPTION

Pass a *share* handle as a parameter. The share handle must have been created by a previous call to *[curl\_share\_init(3)](/curl_share_init/3.md)*. Setting this option, makes this curl handle use the data from the shared handle instead of keeping the data to itself. This enables several curl handles to share data. If the curl handles are used simultaneously in multiple threads, you **must** use the locking methods in the share handle. See *[curl\_share\_setopt(3)](/curl_share_setopt/3.md)* for details.

Data that the share object is not set to share is dealt with the usual way, as if no share was used.

Set this option to NULL again to stop using that share object.

Warning: adding a *share* and then setting it to NULL while the transfer is ongoing is discouraged and may lead to undefined behavior.

## DEFAULT

NULL

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

```
int main(void)
{
  CURL *curl = curl_easy_init();
  CURL *curl2 = curl_easy_init(); /* a second handle */
  if(curl) {
    CURLcode result;
    CURLSH *shobject = curl_share_init();
    curl_share_setopt(shobject, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
    curl_easy_setopt(curl, CURLOPT_SHARE, shobject);
    result = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    /* the second handle shares cookies from the first */
    curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/second");
    curl_easy_setopt(curl2, CURLOPT_COOKIEFILE, "");
    curl_easy_setopt(curl2, CURLOPT_SHARE, shobject);
    result = curl_easy_perform(curl2);
    curl_easy_cleanup(curl2);
    curl_share_cleanup(shobject);
  }
}
```

## AVAILABILITY

Added in curl 7.10

## RETURN VALUE

*[curl\_easy\_setopt(3)](/curl_easy_setopt/3.md)* returns a CURLcode indicating success or error.

CURLE\_OK (0) means everything was OK, non-zero means an error occurred, see *[libcurl-errors(3)](/libcurl-errors/3.md)*.

## SEE ALSO

[**CURLOPT\_COOKIE**(3)](/CURLOPT_COOKIE/3.md), [**CURLSHOPT\_SHARE**(3)](/CURLSHOPT_SHARE/3.md)
