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

FreeBSD Manual Pages

  
 
  

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

NAME
       curl_multi_info_read - read multi stack information

SYNOPSIS
       #include	<curl/curl.h>

       CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue);

DESCRIPTION
       Ask  the	 multi	handle	if  there are any messages from	the individual
       transfers. Messages may include information such	as an error code  from
       the  transfer  or  just the fact	that a transfer	is completed. More de-
       tails on	these should be	written	down as	well.

       Repeated	calls to this function returns a new struct each time, until a
       NULL is returned	as a signal that there is  no  more  to	 get  at  this
       point. The integer pointed to with msgs_in_queue	contains the number of
       remaining messages after	this function was called.

       When  you  fetch	 a message using this function,	it is removed from the
       internal	queue so calling this function again does not return the  same
       message again. It instead returns new messages at each new invoke until
       the queue is emptied.

       WARNING:	The data the returned pointer points to	does not survive call-
       ing	curl_multi_cleanup(3),	    curl_multi_remove_handle(3)	    or
       curl_easy_cleanup(3).

       The CURLMsg struct is simple and	only contains  basic  information.  If
       more  involved  information  is wanted, the particular "easy handle" is
       present	in  that  struct  and  can  be	used  in  subsequent   regular
       curl_easy_getinfo(3) calls (or similar):

	struct CURLMsg {
	  CURLMSG msg;	     /*	what this message means	*/
	  CURL *easy_handle; /*	the handle it concerns */
	  union	{
	    void *whatever;    /* message-specific data	*/
	    CURLcode result;   /* return code for transfer */
	  } data;
	};

       When  msg  is  CURLMSG_DONE,  the message identifies a transfer that is
       done, and then result contains the return code for the easy handle that
       just completed.

       At this point, there are	no other msg types defined.

PROTOCOLS
       This functionality affects all supported	protocols

EXAMPLE
       int main(void)
       {
	 CURLM *multi =	curl_multi_init();
	 CURL *curl = curl_easy_init();
	 if(curl) {
	   struct CURLMsg *m;

	   /* call curl_multi_perform or curl_multi_socket_action first, then loop
	      through and check	if there are any transfers that	have completed */

	   do {
	     int msgq =	0;
	     m = curl_multi_info_read(multi, &msgq);
	     if(m && (m->msg ==	CURLMSG_DONE)) {
	       CURL *e = m->easy_handle;
	       /* m->data.result holds the error code for the transfer */
	       curl_multi_remove_handle(multi, e);
	       curl_easy_cleanup(e);
	     }
	   } while(m);
	 }
       }

AVAILABILITY
       Added in	curl 7.9.6

RETURN VALUE
       A pointer to a filled-in	struct,	or NULL	if it failed  or  ran  out  of
       structs.	  It also writes the number of messages	left in	the queue (af-
       ter this	read) in the integer the second	argument points	to.

SEE ALSO
       curl_multi_cleanup(3), curl_multi_init(3), curl_multi_perform(3)

libcurl				  2025-06-03	       curl_multi_info_read(3)

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

home | help