Other modes of use than just run_loop
The run_loop mode has two disadvantages.
• It is not possible to multiplex more than one queue on the same thread. • There doesn't seem to be a clean way to terminate.
The C library supports other mode ‒ you can get the file descriptor, put it into epoll (or something similar) and when it is ready, try recvmsg on it. Then you call nfq_handle_packet on it and it calls the callback internally. This is more flexible (though slightly more work). Would it be possible to expose this mode of API as well?
I agree, I need this flexibility as well. My use case is to re-order packets (delay the verdict)
What you described is what the library is doing under the hood, recv then nfq_handle_packet