Annotation of embedaddon/curl/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3, revision 1.1

1.1     ! misho       1: .\" **************************************************************************
        !             2: .\" *                                  _   _ ____  _
        !             3: .\" *  Project                     ___| | | |  _ \| |
        !             4: .\" *                             / __| | | | |_) | |
        !             5: .\" *                            | (__| |_| |  _ <| |___
        !             6: .\" *                             \___|\___/|_| \_\_____|
        !             7: .\" *
        !             8: .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
        !             9: .\" *
        !            10: .\" * This software is licensed as described in the file COPYING, which
        !            11: .\" * you should have received as part of this distribution. The terms
        !            12: .\" * are also available at https://curl.haxx.se/docs/copyright.html.
        !            13: .\" *
        !            14: .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
        !            15: .\" * copies of the Software, and permit persons to whom the Software is
        !            16: .\" * furnished to do so, under the terms of the COPYING file.
        !            17: .\" *
        !            18: .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
        !            19: .\" * KIND, either express or implied.
        !            20: .\" *
        !            21: .\" **************************************************************************
        !            22: .\"
        !            23: .TH CURLMOPT_TIMERFUNCTION 3 "May 03, 2019" "libcurl 7.70.0" "curl_multi_setopt options"
        !            24: 
        !            25: .SH NAME
        !            26: CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values
        !            27: .SH SYNOPSIS
        !            28: .nf
        !            29: #include <curl/curl.h>
        !            30: 
        !            31: int timer_callback(CURLM *multi,    /* multi handle */
        !            32:                    long timeout_ms, /* timeout in number of ms */
        !            33:                    void *userp);    /* private callback pointer */
        !            34: 
        !            35: CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);
        !            36: .SH DESCRIPTION
        !            37: Pass a pointer to your callback function, which should match the prototype
        !            38: shown above.
        !            39: 
        !            40: Certain features, such as timeouts and retries, require you to call libcurl
        !            41: even when there is no activity on the file descriptors.
        !            42: 
        !            43: Your callback function \fBtimer_callback\fP should install a non-repeating
        !            44: timer with an interval of \fBtimeout_ms\fP. When time that timer fires, call
        !            45: either \fIcurl_multi_socket_action(3)\fP or \fIcurl_multi_perform(3)\fP,
        !            46: depending on which interface you use.
        !            47: 
        !            48: A \fBtimeout_ms\fP value of -1 passed to this callback means you should delete
        !            49: the timer. All other values are valid expire times in number of milliseconds.
        !            50: 
        !            51: The \fBtimer_callback\fP will only be called when the timeout expire time is
        !            52: changed.
        !            53: 
        !            54: The \fBuserp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.
        !            55: 
        !            56: The timer callback should return 0 on success, and -1 on error. This callback
        !            57: can be used instead of, or in addition to, \fIcurl_multi_timeout(3)\fP.
        !            58: 
        !            59: \fBWARNING:\fP even if it feels tempting, avoid calling libcurl directly from
        !            60: within the callback itself when the \fBtimeout_ms\fP value is zero, since it
        !            61: risks triggering an unpleasant recursive behavior that immediately calls
        !            62: another call to the callback with a zero timeout...
        !            63: .SH DEFAULT
        !            64: NULL
        !            65: .SH PROTOCOLS
        !            66: All
        !            67: .SH EXAMPLE
        !            68: .nf
        !            69: static gboolean timeout_cb(gpointer user_data)
        !            70: {
        !            71:   int running;
        !            72:   if(user_data) {
        !            73:     g_free(user_data);
        !            74:     curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
        !            75:   }
        !            76:   curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
        !            77:   return G_SOURCE_REMOVE;
        !            78: }
        !            79: 
        !            80: static int timerfunc(CURLM *multi, long timeout_ms, void *userp)
        !            81: {
        !            82:   guint *id = userp;
        !            83: 
        !            84:   if(id)
        !            85:     g_source_remove(*id);
        !            86: 
        !            87:   /* -1 means we should just delete our timer. */
        !            88:   if(timeout_ms == -1) {
        !            89:     g_free(id);
        !            90:     id = NULL;
        !            91:   }
        !            92:   else {
        !            93:     if(!id)
        !            94:       id = g_new(guint, 1);
        !            95:     *id = g_timeout_add(timeout_ms, timeout_cb, id);
        !            96:   }
        !            97:   curl_multi_setopt(multi, CURLMOPT_TIMERDATA, id);
        !            98:   return 0;
        !            99: }
        !           100: 
        !           101: curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
        !           102: .fi
        !           103: .SH AVAILABILITY
        !           104: Added in 7.16.0
        !           105: .SH RETURN VALUE
        !           106: Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
        !           107: .SH "SEE ALSO"
        !           108: .BR CURLMOPT_TIMERDATA "(3), " CURLMOPT_SOCKETFUNCTION "(3), "

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>