CURLSHOPT\_USERDATA(3) Library Functions Manual CURLSHOPT\_USERDATA(3)

# [NAME](#NAME)

CURLSHOPT\_USERDATA - pointer passed to the lock and unlock mutex callbacks

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_USERDATA, void *clientp);
```

# [DESCRIPTION](#DESCRIPTION)

The *clientp* parameter is held verbatim by libcurl and is passed on as the *clientp* argument to the callbacks set with [*CURLSHOPT\_LOCKFUNC(3)*](/man/os/curl/CURLSHOPT_LOCKFUNC.3) and [*CURLSHOPT\_UNLOCKFUNC(3)*](/man/os/curl/CURLSHOPT_UNLOCKFUNC.3).

# [PROTOCOLS](#PROTOCOLS)

This functionality affects all supported protocols

# [EXAMPLE](#EXAMPLE)

```
struct secrets {


  void *custom;
};
int main(void)
{


  CURLSHcode sh;


  struct secrets private_stuff;


  CURLSH *share = curl_share_init();


  sh = curl_share_setopt(share, CURLSHOPT_USERDATA, &private_stuff);


  if(sh)


    printf("Error: %s\n", curl_share_strerror(sh));
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.10.3

# [RETURN VALUE](#RETURN_VALUE)

CURLSHE\_OK (zero) means that the option was set properly, non-zero means an error occurred. See [*libcurl-errors(3)*](/man/os/curl/libcurl-errors.3) for the full list with descriptions.

# [SEE ALSO](#SEE_ALSO)

[**CURLSHOPT\_LOCKFUNC**(3)](/man/os/curl/CURLSHOPT_LOCKFUNC.3), [**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)

2026-10-01 libcurl

---

Document: CURLSHOPT_USERDATA(3) from curl 8.22.0-r4 (Chainguard OS)
Source: https://github.com/curl/curl.git
