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

# curl\_share\_init(3)

create a share object

## NAME

curl\_share\_init - create a share object

## SYNOPSIS

```
#include <curl/curl.h>
CURLSH *curl_share_init();
```

## DESCRIPTION

This function returns a pointer to a *CURLSH* handle to be used as input to all the other share-functions, sometimes referred to as a share handle in some places in the documentation. This init call MUST have a corresponding call to *[curl\_share\_cleanup(3)](/curl_share_cleanup/3.md)* when all operations using the share are complete.

This *share handle* is what you pass to curl using the *[CURLOPT\_SHARE(3)](/CURLOPT_SHARE/3.md)* option with *[curl\_easy\_setopt(3)](/curl_easy_setopt/3.md)*, to make that specific curl handle use the data in this share.

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

```
int main(void)
{
  CURLSHcode sh;
  CURLSH *share = curl_share_init();
  sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
  if(sh)
    printf("Error: %s\n", curl_share_strerror(sh));
}
```

## AVAILABILITY

Added in curl 7.10

## RETURN VALUE

If this function returns NULL, something went wrong (out of memory, etc.) and therefore the share object was not created.

## SEE ALSO

[**curl\_share\_cleanup**(3)](/curl_share_cleanup/3.md), [**curl\_share\_setopt**(3)](/curl_share_setopt/3.md)
