Hi Robert, You could grab the socket from the connection (MHD_CONNECTION_INFO_CONNECTION_FD) and then do whatever syscall you fancy to find out if the client disconnected.
However, note that there may not be a reliable way to do this, because without a TCP FIN/CLOSE/RST from the client, the server may simply never notice that the client is gone until it tries to send data to the client and that then causes a RST. This limitation also applies to the resume/suspend approach you mapped, and fundamentally arises from the design of TCP. Manually setting socket options to demand TCP KEEPALIVE from the OS should theoretically mitigate this, I don't know about the practical implications though (= have not tried). Happy hacking! Christian On 7/29/19 5:08 PM, Robert D Kocisko wrote: > Hello all, > > Context: Single thread, external select with epoll. > > I have been using the suspend/resume flow control mechanism of > libmicrohttpd to implement longpoll functionality, but now have a new > use case where it is important to be able to check a particular > connection while it is suspended to know whether the client has > disconnected. The only way I can imagine doing this is to resume the > connection for some amount of time (how long?) and see whether the > MHD_OPTION_NOTIFY_COMPLETED callback gets called and then suspend the > connection again. But I'm wondering if there's a simpler way to do this > that doesn't involve resuming and waiting for a callback? > > Thanks, > Bob
signature.asc
Description: OpenPGP digital signature
