curl\_share\_init(3) Library Functions Manual curl\_share\_init(3)

# [NAME](#NAME)

curl\_share\_init - create a share object

# [SYNOPSIS](#SYNOPSIS)

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

# [DESCRIPTION](#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)*](/man/os/curl/curl_share_cleanup.3) when all operations using the share are complete.

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

# [PROTOCOLS](#PROTOCOLS)

This functionality affects all supported protocols

# [EXAMPLE](#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](#AVAILABILITY)

Added in curl 7.10

# [RETURN VALUE](#RETURN_VALUE)

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

# [SEE ALSO](#SEE_ALSO)

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

2026-10-22 libcurl

---

Document: curl_share_init(3) from curl 8.23.0-r2 (Chainguard OS)
Source: https://github.com/curl/curl.git
