Hi,

I have some doubts regarding how MHD_OPTION_THREAD_POOL_SIZE and MHD_OPTION_CONNECTION_LIMIT interact together. From MHD documentation at https://www.gnu.org/software/libmicrohttpd/manual/libmicrohttpd.html:

 * MHD_OPTION_THREAD_POOL_SIZE: Number (unsigned int) of threads in
   thread pool. Enable thread pooling by setting this value to to
   something greater than 1.
 * MHD_OPTION_CONNECTION_LIMIT: Maximum number of concurrent
   connections to accept (followed by an unsigned int)

Assuming that MHD_OPTION_THREAD_POOL_SIZE is greater than zero (i.e. thread pool is actually used) the following posibilites are possible:

 * MHD_OPTION_THREAD_POOL_SIZE => MHD_OPTION_CONNECTION_LIMIT. In this
   case, I understand that MHD_OPTION_CONNECTION_LIMIT limits the
   number of concurrent connections, no matter the size of the pool.
 * MHD_OPTION_THREAD_POOL_SIZE < MHD_OPTION_CONNECTION_LIMIT. Not sure
   what happen in this case if all the threads in the pool are busy and
   a new the process receives a new incoming connection, among the
   following:
    1. The connection is rejected (as if it has hit the
       MHD_OPTION_CONNECTION_LIMIT)
    2. The connection is somehow enqueued internally until a free
       thread in the pool can deal with it. In that case I understand
       that MHD_OPTION_CONNECTION_LIMIT is the size of such internal queue.
    3. A new "extra to pool" thread is created to deal with the
       incoming connection (to be destroyed once the requests has been
       processed).

Which option corresponds to the actual behaviour, please?

Thanks!

Best regards,

------
Fermín


Reply via email to