我正在使用多套接字,但是,我对此API感到困惑
int timer_callback(CURLM *multi, /* multi handle */
long timeout_ms, /* see above */
void *userp); /* private callback pointer *
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);
我知道当超时发生变化时,会调用回调函数,但是,我们第一次注册回调函数时,例如:
curl_multi_setopt(handle, CURLMOPT_TIMERFUNCTION, timer_cb);
//and the callback function is
int timer_cb(CURLM *multi, long timeout_ms,void *userp)
{.....}
第二个参数timeout_ms值是什么?我读了docs / example hiperfifo.c,我看到了日志,这个值是1ms,这个值是怎么来的?
谢谢
Knuth的
答案 0 :(得分:1)
CURLMOPT_TIMERFUNCTION - 设置回调以接收超时值
int timer_callback(CURLM *multi, /* multi handle */<br>
long timeout_ms, /* see above *//<br
void *userp); /* private callback pointer */
当超时值发生变化时,将调用此回调函数。
timeout_ms
值是应用程序应该调用其中一个&#34;执行&#34;的最新值。多接口的函数(curl_multi_socket_action和curl_multi_perform) - 允许libcurl保持超时和重试等工作。 timeout_ms值为-1表示根本没有超时,0表示超时已过期。 libcurl尝试仅在固定的未来超时时间实际更改时限制调用此方法
答案 1 :(得分:-1)
一旦easy_handle通过curl_multi_add_handle()
添加到multi_handle [在这种情况下,只要new_conn()
可用],内部“快速启动”即可。通过创建超时操作提供,其中1ms作为超时值。
以下来自multi.c的评论
/* Set the timeout for this multi handle to expire really soon so that it will be taken care of even when this multi handle is added in the midst of operation when only the curl_multi_socket() API is used. During that flow, only sockets that time-out or have actions will be dealt with. Since this handle has no action yet, we make sure it times out to get things to happen. */
Curl_expire(data, 1);
在CURLMOPT_TIMERFUNCTION
update_timer()
内调用Curl_expire()
设置的实际计时器回调
希望这有帮助。