Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CURLOPT_OPENSOCKETDATA(3)  Library Functions Manual  CURLOPT_OPENSOCKETDATA(3)

NAME
       CURLOPT_OPENSOCKETDATA -	pointer	passed to open socket callback

SYNOPSIS
       #include	<curl/curl.h>

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

DESCRIPTION
       Pass a pointer that is untouched	by libcurl and passed as the first ar-
       gument  in  the	open  socket callback set with CURLOPT_OPENSOCKETFUNC-
       TION(3).

DEFAULT
       NULL

PROTOCOLS
       This functionality affects all supported	protocols

EXAMPLE
       /* 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;
       }

       int main(void)
       {
	 CURL *curl = curl_easy_init();
	 if(curl) {
	   CURLcode res;
	   extern int sockfd; /* the already connected one */

	   /* libcurl thinks 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	curl 7.17.1

RETURN VALUE
       curl_easy_setopt(3) returns a CURLcode indicating success or error.

       CURLE_OK	(0) means everything was OK, non-zero means an error occurred,
       see libcurl-errors(3).

SEE ALSO
       CURLOPT_CLOSESOCKETFUNCTION(3),	 CURLOPT_OPENSOCKETFUNCTION(3),	  CUR-
       LOPT_SOCKOPTFUNCTION(3)

libcurl				  2025-06-03	     CURLOPT_OPENSOCKETDATA(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=CURLOPT_OPENSOCKETDATA&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help