GNURLOPT_OPENSOCKETDATA(3)
π 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
- nixos 26.05: libgnurl 7.72.0
- nixpkgs unstable: libgnurl 7.72.0
- Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms