CURLMOPT_TIMERFUNCTION(3) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

CURLMOPT_TIMERFUNCTION(3)

CURLMOPT_TIMERFUNCTION(3)  curl_multi_setopt options CURLMOPT_TIMERFUNCTION(3)

NAME
       CURLMOPT_TIMERFUNCTION - callback to receive timeout values

SYNOPSIS
       #include <curl/curl.h>

       int timer_callback(CURLM *multi,    /* multi handle */
                          long timeout_ms, /* timeout in number of ms */
                          void *userp);    /* private callback pointer */

       CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);

DESCRIPTION
       Pass a pointer to your callback function, which should match the proto‐
       type shown above.

       Certain  features,  such  as  timeouts and retries, require you to call
       libcurl even when there is no activity on the file descriptors.

       Your callback function timer_callback should  install  a  non-repeating
       timer  with  an expire time of timeout_ms milliseconds. When that timer
       fires,  call  either  curl_multi_socket_action(3)  or   curl_multi_per‐
       form(3), depending on which interface you use.

       A  timeout_ms  value  of  -1  passed  to this callback means you should
       delete the timer. All other values are valid expire times in number  of
       milliseconds.

       The  timer_callback will only be called when the timeout expire time is
       changed.

       The userp pointer is set with CURLMOPT_TIMERDATA(3).

       The timer callback should return 0 on success, and -1 on error. If this
       callback returns error, all transfers currently  in  progress  in  this
       multi handle will be aborted and fail.

       This   callback   can   be   used   instead  of,  or  in  addition  to,
       curl_multi_timeout(3).

       WARNING: do not call libcurl directly from within the  callback  itself
       when  the  timeout_ms  value  is zero, since it risks triggering an un‐
       pleasant recursive behavior that immediately calls another call to  the
       callback with a zero timeout...

DEFAULT
       NULL

PROTOCOLS
       All

EXAMPLE
       static gboolean timeout_cb(gpointer user_data)
       {
         int running;
         if(user_data) {
           g_free(user_data);
           curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
         }
         curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
         return G_SOURCE_REMOVE;
       }

       static int timerfunc(CURLM *multi, long timeout_ms, void *userp)
       {
         guint *id = userp;

         if(id)
           g_source_remove(*id);

         /* -1 means we should just delete our timer. */
         if(timeout_ms == -1) {
           g_free(id);
           id = NULL;
         }
         else {
           if(!id)
             id = g_new(guint, 1);
           *id = g_timeout_add(timeout_ms, timeout_cb, id);
         }
         current_timer = id;
         return 0;
       }

       curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);

AVAILABILITY
       Added in 7.16.0

RETURN VALUE
       Returns  CURLM_OK  if the option is supported, and CURLM_UNKNOWN_OPTION
       if not.

SEE ALSO
       CURLMOPT_TIMERDATA(3), CURLMOPT_SOCKETFUNCTION(3),

libcurl 7.86.0                   May 17, 2022        CURLMOPT_TIMERFUNCTION(3)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3