[zeromq-dev] zmq_close() has no effect after fork()
Jon Dyte
jon at totient.co.uk
Tue Oct 9 22:44:59 CEST 2012
On 09/10/12 09:47, John Khvatov wrote:
> Hello Bennie,
>
> On Oct 9, 2012, at 11:13 AM, Bennie Kloosteman wrote:
>
>> Why not create the context and socket after you fork ?
> I don't want to use ZMQ in child process. I want to release all resources used by ZMQ before master exiting.
>
> It needed for restart multi-worker application: old master exits, old workers still serve existing clients, new master runs and start new workers for new clients. It fails because new master can't bind to address which is still used after I call zmq_close()/zmq_term().
>
> The question is how to release ZMQ resources (unbind TCP port) after fork()?
>
John
I think the child process needs to close all the file descriptors that
it does not need, though there would still be a race, if you were to
start a new master quickly enough.
If you exec a new process rather than just fork, the problem may also be
alleviated.
Jon
More information about the zeromq-dev
mailing list