curl\_easy\_ssls\_import(3) Library Functions Manual curl\_easy\_ssls\_import(3)

# [NAME](#NAME)

curl\_easy\_ssls\_import - import SSL sessions

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
CURLcode curl_easy_ssls_import(CURL *handle,


                               const char *session_key,


                               const unsigned char *shmac, size_t shmac_len,


                               const unsigned char *sdata, size_t sdata_len);
```

# [DESCRIPTION](#DESCRIPTION)

This function imports a previously exported SSL session ticket. **sdata** and **sdata\_len** must always be provided. If **session\_key** is **NULL**, then **shmac** and **shmac\_len** must be given as received during the export. See [*curl\_easy\_ssls\_export(3)*](/man/os/curl/curl_easy_ssls_export.3) for a description of those.

Import of session tickets from other curl versions may fail due to changes in the handling of **shmac** or **sdata**. A session ticket which has already expired is silently discarded.

# [PROTOCOLS](#PROTOCOLS)

This functionality affects all TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. only

This option works only with the following TLS backends: GnuTLS, OpenSSL, mbedTLS and wolfSSL

# [EXAMPLE](#EXAMPLE)

```
extern unsigned char *shmac, *sdata;
int main(void)
{


  CURLSHcode sh;


  CURLSH *share = curl_share_init();


  CURLcode result;


  CURL *curl;


  sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);


  if(sh)


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


  curl = curl_easy_init();


  if(curl) {


    size_t hlen = 4, slen = 5;


    curl_easy_setopt(curl, CURLOPT_SHARE, share);


    /* read shmac and sdata from storage */


    result = curl_easy_ssls_import(curl, NULL, shmac, hlen, sdata, slen);


    /* always cleanup */


    curl_easy_cleanup(curl);


  }


  curl_share_cleanup(share);
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 8.12.0

# [RETURN VALUE](#RETURN_VALUE)

This function returns a CURLcode indicating success or error.

CURLE\_OK (0) means everything was OK, non-zero means an error occurred, see [*libcurl-errors(3)*](/man/os/curl/libcurl-errors.3). If [*CURLOPT\_ERRORBUFFER(3)*](/man/os/curl/CURLOPT_ERRORBUFFER.3) was set with [*curl\_easy\_setopt(3)*](/man/os/curl/curl_easy_setopt.3) there can be an error message stored in the error buffer when non-zero is returned.

# [SEE ALSO](#SEE_ALSO)

[**CURLOPT\_SHARE**(3)](/man/os/curl/CURLOPT_SHARE.3), [**curl\_easy\_ssls\_export**(3)](/man/os/curl/curl_easy_ssls_export.3), [**curl\_share\_setopt**(3)](/man/os/curl/curl_share_setopt.3)

2026-09-24 libcurl

---

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