GNURLOPT_OPENSOCKETDATA(3)

πŸ“¦ version 7.72.0, in nixos 26.05, nixpkgs unstable

πŸ’– NAME πŸ’–

CURLOPT_OPENSOCKETDATA β€” custom pointer passed to open socket callback. This is the GNURLOPT_OPENSOCKETDATA(3) page from the curl_easy_setopt options fam, and it's literally all about handing libcurl a pointer for your open-socket callback. πŸ’…

✨ SYNOPSIS ✨

#include <gnurl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void
*pointer);

🌸 DESCRIPTION 🌸

Okay so bestie, you pass a pointer here and libcurl leaves it completely untouched. It gets passed as the first argument in the opensocket callback you set with CURLOPT_OPENSOCKETFUNCTION(3). That's the whole vibe. ✨

πŸŽ€ DEFAULT πŸŽ€

The default value of this parameter is NULL. Iconic empty-hands energy. 🫢

πŸ¦‹ PROTOCOLS πŸ¦‹

All β€” every single one, periodt. 🌈

πŸ”₯ EXAMPLE πŸ”₯

Here's the code exactly as it should be, because details are the main character:

/* make libcurl use the already established socket 'sockfd' */

static curl_socket_t opensocket(void *clientp,
                                curlsocktype purpose,
                                struct curl_sockaddr *address)
{
  curl_socket_t sockfd;
  sockfd = *(curl_socket_t *)clientp;
  /* the actual externally set socket is passed in via the OPENSOCKETDATA
     option */
  return sockfd;
}

static int sockopt_callback(void *clientp, curl_socket_t curlfd,
                            curlsocktype purpose)
{
  /* This return code was added in libcurl 7.21.5 */
  return CURL_SOCKOPT_ALREADY_CONNECTED;
}

curl = curl_easy_init();
if(curl) {
  /* libcurl will internally think that you connect to the host
   * and port that you specify in the URL option. */
  curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
  /* call this function to get a socket */
  curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
  curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);

  /* call this function to set options for the socket */
  curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);

  res = curl_easy_perform(curl);

  curl_easy_cleanup(curl);
}

⭐ AVAILABILITY ⭐

Added in 7.17.1. A lil vintage but still slaying. πŸ’œ

πŸ’€ RETURN VALUE πŸ’€

Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. No cap. 😭

πŸ‘‘ SEE ALSO πŸ‘‘


xoxo, your GNURLOPT_OPENSOCKETDATA(3) bestie πŸ’‹ β€” from libcurl 7.37.0, dated 16 Jun 2014. 🫢

πŸ“¦ where this page comes from