You can also use very portable and universal solution:
mhd = MHD_start_daemon(MHD_USE_AUTO, ....
while(1)
{
fd_set rs;
fd_set ws;
fd_set es;
MHD_socket maxsock;
struct timeval tv;
struct timeval* tvp;
unsigned long long tov;
FD_ZERO (&rs);
FD_ZERO (&ws);
FD_ZERO (&es);
maxsock = MHD_INVALID_SOCKET;
if (MHD_NO == MHD_get_fdset (d, &rs, &ws, &es, &maxsock))
break;
if (MHD_NO == MHD_get_timeout(mhd, &tov))
tvp = NULL;
else
{
tv.tv_sec = tov / 1000;
tv.tv_usec = (tov % 1000) * 1000;
tvp = &tvp;
}
select (maxsock+ 1, &rs, &ws, &es, tvp);
if (MHD_NO == MHD_run_from_select (d, &rs, &ws, &es)
break;
}
Untested.
Add error checking and types casting.
--
Best Wishes,
Evgeny Grin
03.12.2019, 00:32, "Christian Grothoff" <groth...@gnunet.org>:
On 12/2/19 10:18 PM, José Bollo wrote:
Well, that's trivial. Please consider the attached fragment (notI know it is trivial (my implementation below) but I advocate to offer
tested, but should be very close to what you need, modulo error
handling).
a facility that does the job. It avoids tricky aspects like EPOLL and
get_daemon_info (is working for windows???)
AFAIK on the Windows Subsystem for Linux it should work, and everything
else is a mess to do in a portable way. Regardless, these loops are
usually pretty simple, hence I do still think that they don't belong
into the library. What we could do is at sample loops into the
documentation (tutorial?).