1CURLOPT_OPENSOCKETDATA(3) curl_easy_setopt options CURLOPT_OPENSOCKETDATA(3)
2
3
4
6 CURLOPT_OPENSOCKETDATA - pointer passed to open socket callback
7
9 #include <curl/curl.h>
10
11 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer);
12
14 Pass a pointer that will be untouched by libcurl and passed as the
15 first argument in the open socket callback set with CURLOPT_OPENSOCKETā
16 FUNCTION(3).
17
19 The default value of this parameter is NULL.
20
22 All
23
25 /* make libcurl use the already established socket 'sockfd' */
26
27 static curl_socket_t opensocket(void *clientp,
28 curlsocktype purpose,
29 struct curl_sockaddr *address)
30 {
31 curl_socket_t sockfd;
32 sockfd = *(curl_socket_t *)clientp;
33 /* the actual externally set socket is passed in via the OPENSOCKETDATA
34 option */
35 return sockfd;
36 }
37
38 static int sockopt_callback(void *clientp, curl_socket_t curlfd,
39 curlsocktype purpose)
40 {
41 /* This return code was added in libcurl 7.21.5 */
42 return CURL_SOCKOPT_ALREADY_CONNECTED;
43 }
44
45 curl = curl_easy_init();
46 if(curl) {
47 /* libcurl will internally think that you connect to the host
48 * and port that you specify in the URL option. */
49 curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
50 /* call this function to get a socket */
51 curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
52 curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
53
54 /* call this function to set options for the socket */
55 curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
56
57 res = curl_easy_perform(curl);
58
59 curl_easy_cleanup(curl);
60 }
61
63 Added in 7.17.1
64
66 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION
67 if not.
68
70 CURLOPT_OPENSOCKETFUNCTION(3), CURLOPT_SOCKOPTFUNCTION(3),
71
72
73
74libcurl 8.0.1 January 02, 2023 CURLOPT_OPENSOCKETDATA(3)