Hello masters,

I found the following related message:

https://lists.gnu.org/archive/html/libmicrohttpd/2014-09/msg00012.html

I've used a similar logic, but with item X below, because I need to wait
the client processing:

1) MHD_quiesce_daemon()
*X) while (info.num_connections > 0) sleep(0.5s) # pseudo code*
2) MHD_stop_daemon()
3) close()

Real implementation:

bool bf_httpsrv_shutdown(struct bf_httpsrv *srv, bool force) {
    MHD_socket fd;
    if (srv && srv->listening) {
        fd = MHD_quiesce_daemon(srv->mhd);
        if (!force)
            while (MHD_get_daemon_info(srv->mhd,
MHD_DAEMON_INFO_CURRENT_CONNECTIONS)->num_connections > 0)
                usleep(1000 * 500); //TODO: allow to use external callback
        MHD_stop_daemon(srv->mhd);
        if (fd != MHD_INVALID_SOCKET)
            close(fd);
        srv->listening = false;
        return true;
    }
    return false;
}


Calling it with bf_httpsrv_shutdown(srv, false) the server stops waiting
for clients processing.

So, what do you think about the logic above? Should it be improved?!

Thanks in advance for any suggestions!

-- 
Silvio Clécio

Reply via email to