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

FreeBSD Manual Pages

  
 
  

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

NAME
       curl_multi_waitfds  -  extract file descriptor information from a multi
       handle

SYNOPSIS
       #include	<curl/curl.h>
       #include	<stdlib.h>

       CURLMcode curl_multi_waitfds(CURLM *multi,
				    struct curl_waitfd *ufds,
				    unsigned int size,
				    unsigned int *fd_count);

DESCRIPTION
       This function extracts curl_waitfd  structures  which  are  similar  to
       poll(2)'s pollfd	structure from a given multi_handle.

       These  structures can be	used for polling on multi_handle file descrip-
       tors in a fashion similar to  curl_multi_poll(3).  The  curl_multi_per-
       form(3) function	should be called as soon as one	of them	is ready to be
       read from or written to.

       libcurl	fills  provided	ufds array up to the size.  If a number	of de-
       scriptors used by the multi_handle is greater than the  size  parameter
       then libcurl returns CURLM_OUT_OF_MEMORY	error.

       If the fd_count argument	is not a null pointer, it points to a variable
       that  on	 return	 specifies  the	 number	 of  descriptors  used	by the
       multi_handle to be checked for being ready to read or write.

       The client code can pass	size equal to zero just	to get the  number  of
       the descriptors and allocate appropriate	storage	for them to be used in
       a  subsequent  function	call. In this case, fd_count receives a	number
       greater than or equal to	the number of descriptors.

PROTOCOLS
       This functionality affects all supported	protocols

EXAMPLE
       #include	<stdlib.h>

       int main(void)
       {
	 CURLMcode mc;
	 struct	curl_waitfd *ufds;

	 CURLM *multi =	curl_multi_init();

	 do {
	   /* call curl_multi_perform()	*/

	   /* get the count of file descriptors	from the transfers */
	   unsigned int	fd_count = 0;

	   mc =	curl_multi_waitfds(multi, NULL,	0, &fd_count);

	   if(mc != CURLM_OK) {
	     fprintf(stderr, "curl_multi_waitfds() failed, code	%d.\n",	mc);
	     break;
	   }

	   if(!fd_count)
	     continue; /* no descriptors yet */

	   /* allocate storage for our descriptors */
	   ufds	= malloc(fd_count * sizeof(struct curl_waitfd));

	   /* get wait descriptors from	the transfers and put them into	array. */
	   mc =	curl_multi_waitfds(multi, ufds,	fd_count, &fd_count);

	   if(mc != CURLM_OK) {
	     fprintf(stderr, "curl_multi_waitfds() failed, code	%d.\n",	mc);
	     free(ufds);
	     break;
	   }

	   /* Do polling on descriptors	in ufds	*/

	   free(ufds);
	 } while(!mc);
       }

AVAILABILITY
       Added in	curl 8.8.0

RETURN VALUE
       This function returns a CURLMcode indicating success or error.

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

SEE ALSO
       curl_multi_fdset(3),	curl_multi_perform(3),	   curl_multi_poll(3),
       curl_multi_wait(3)

libcurl				  2025-06-03		 curl_multi_waitfds(3)

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

home | help