Hi Louis, Ah, yes, you're right, I was confused, misremembered and should have checked the code before answering. While way in the distant past thread-per-connection didn't use select/poll, we had to put in a poll/select a few years ago for the timeout handling of the threads (once we supported timeouts for connections).
Anyway, you can simply do THREAD_PER_CONNECTION with MHD_USE_POLL and then you have no FD-size limit and do have O(1) operations for everything. Sorry for my confusion. Happy hacking! Christian On 03/16/2015 06:27 PM, [email protected] wrote: > Hi Christian, > > Looking at the 0.9.38 source code, I am getting confused. > Setting MHD_USE_THREAD_PER_CONNECTION eventually results in creating two > threads: > create_thread (&daemon->pid, daemon, &MHD_select_thread, daemon) > create_thread (&connection->pid, daemon, &MHD_handle_connection, connection) > Entry points MHD_select_thread eventually calls select() on the listening > socket. > Entry points MHD_handle_connection eventually calls select() on the > connection socket. > > Louis > > Le 16/03/15, Christian Grothoff <[email protected]> a écrit : >> On 03/16/2015 05:09 PM, [email protected] wrote: >>> Le 11/03/15, *Christian Grothoff * <[email protected]> a écrit : >>>> On 03/11/2015 12:58 PM, [email protected] wrote: >>>>> Hi Christian, >>>>> >>>>> I wanted to use external threads because my system has the following >>>>> constraints: >>>>> 1) One connection per thread: the response to the client is time critical >>>>> and I cannot afford that a connection delays another one. >>>> >>>> Then you should use the one-thread-per-connection mode, that is exactly >>>> what you want. MHD will use a thread for each connection, which matches >>>> your requirements. This method also has no limits on open FDs as MHD >>>> doesn't use select() but blocking read/write operations instead. >>> >>> Are you refering to MHD_USE_THREAD_PER_CONNECTION? >> >> Yes. >> >>> Or using >>> MHD_OPTION_CONNECTION_LIMIT >> >> No, that option has nothing to do with the threading modes. >> >>> set to MHD_OPTION_THREAD_POOL_SIZE? >> >> No, a thread pool is again different, as there you use one thread to >> handle multiple connections, which may give you the delays you found so >> problematic. >> >>> In both cases shouldn't I use MHD_USE_POLL in order not to use select ()? >> >> MHD_USE_POLL has no impact on MHD_USE_THREAD_PER_CONNECTION, as in that >> case neither select() nor poll() are used anyway. >> >> Happy hacking! >> >> Christian >> >> >
