Hi,
I'm using libmicrohttpd to respond to an HTTP request for a large amount of data (sometimes GBs) using external select and MHD_create_response_from_callback with a known size. The data is sourced from hardware via a kernel driver. When the HTTP request is received, data is requested from the hardware, and then transferred in 64MB chunks to buffers allocated by the driver. Inside of my MHD_ContentReaderCallback, I check if the data transfer by the driver is complete, and currently memcpy 'max' bytes of data at a time from the driver buffer into the 'char *buf' passed to the callback.
I've attempted two methods when it comes to specifying block_size for MHD_create_response_from_callback. If I specify 64MB, the problem is that the memcpy takes too long and blocks my application loop. I've also tried specifying a small block size like 64KB. However, the response is slow and inefficient because it is only responding 64KB per loop, which is doing other things as well.
Is there a zero-copy way to use MHD_create_response_from_callback that doesn't require memcpy'ing the data into buf in the callback? Perhaps by specifying a pointer to a buffer in the callback (similar to MHD_create_response_from_buffer)?
Thanks!
-Dan