Den lör 3 apr. 2021 kl 18:41 skrev Fulup Ar Foll <fulup.arf...@iot.bzh>:

> Henrik,
>
> Curl timeout and mainloop timer as in my sample with libuv, epool, ... are
> completely independent. Curl handle its own timer to remind you when you're
> supose to do some action. But as soon transfert start you only handle
> communication go through the main event loop.
>
> In order to use epool, you only need to map what I did for livuv, nothing
> more nothing less. You only need to write the 'epoll' version of
> https://github.com/fulup-bzh/libcurl-mainloop/blob/main/glue-libuv.c and
> you should only call one curl_multi_timeout()
>
>
As I wrote earlier, usually when you call curl_multi_add_handle(), the
Timer Function CB is called once by curl with timeout set to 0. Then when
you call curl_multi_socket_action() with CURL_SOCKET_TIMEOUT the Timer
Function CB is usually called once more but this time with a timeout set to
1. If you do not call curl_multi_socket_action() again with
CURL_SOCKET_TIMEOUT after 1ms then curl stalls indefinitely since there
will be no read or write events triggering the event handler to return
events, in fact you won't even get a call to your Socket Function CB before
you handle that first 1ms timeout.

Now I might have misread what you wrote, but some external timer is still
needed so the question at hand is if having such a timer is more or less
complexity/overhead than simply calling curl_multi_timeout().

/HH


Fulup
>
> On 03/04/2021 16:08, Henrik Holst wrote:
>
>
>
> Den lör 3 apr. 2021 kl 10:40 skrev Fulup Ar Foll <fulup.arf...@iot.bzh>:
>
>> Henrik,
>>
>> I wrote an example using either sytemd or libuv main loop, it might
>> eventually help you https://github.com/fulup-bzh/libcurl-mainloop
>>
> Thanks, I can see that you use the timer functionatilty in libuv and
> systemd to avoid the problems that I'm talking about. The main question
> then is if a call to curl_multi_timeout() before each call to epoll_wait()
> / poll() / select() is more or less overhead than using timers.
>
> /HH
>
>>
>> Fulup
>>
>> On 02/04/2021 23:08, Henrik Holst via curl-library wrote:
>>
>>
>>
>> Den fre 2 apr. 2021 kl 23:05 skrev Daniel Stenberg <dan...@haxx.se>:
>>
>>> On Fri, 2 Apr 2021, Henrik Holst via curl-library wrote:
>>>
>>> > for (;;)
>>> >  int ret = poll (fds, nfds, timeout);
>>> >
>>> >  if (ret == 0) {/* timeout */
>>> >     curl_multi_socket_action (curlm, CURL_SOCKET_TIMEOUT, 0,
>>> > &running_handles);
>>> >  } else if (ret != -1) { /* events */
>>> >    if (fds[0].revents != 0)
>>> >      curl_multi_socket_action (curlm, fds[0].fd, fds[0].revents,
>>> > &running_handles);
>>> >    else if (fds[1]).revents != 0)
>>> >      ...
>>> >  }
>>> > }
>>>
>>> This is a typical example of an event loop that should rather use
>>> curl_multi_perform() or perhaps even just curl_multi_poll(). And yes,
>>> for such
>>> an event loop you want curl_multi_timeout (at least unless you use
>>> curl_multi_poll).
>>>
>>> If you use poll() then the multi socket API is probably the wrong
>>> choice. The
>>> multi socket API is for event-based handling.
>>>
>> Okey, but the very same thing happens with epoll, or are we only defining
>> event-based handling as say libevent, libev and libuv?
>> /HH
>>
>> -------------------------------------------------------------------
>> Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
>> Etiquette:   https://curl.se/mail/etiquette.html
>>
>>
>>
>
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to