Message: 1
Date: Fri, 5 Jan 2018 10:03:17 +0100
From: Francesco <[email protected]>
To: zeromq-dev <[email protected]>
Subject: [zeromq-dev] how to reliably wait for SUBscribers to connect
        before sending messages
Message-ID:
        <cakw0qij8-yjbiygqbaeeqpnotahz2hafwx1weqsfdmd4rsh...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi all,
I have some unit tests around the ZMQ wrappers I wrote for PUB/SUB sockets
(these wrappers integrate functionalities specific to my use case).

In these unit tests I spawn a thread that creates a PUB socket and another
one creating a SUB socket. In the PUB thread I do zmq_bind(), then sleep
for a SETTLE_TIME and then I start sending messages with zmq_msg_send().
In the SUB I just do zmq_connect() and then immediately zmq_msg_recv().

The problem is when I run such unit tests under valgrind. In that case I
noticed that randomly my settle time of 1sec is not enough: the unit tests
fail because the SUB receives 0 messages instead of N>0.
A simple fix would be to increase the settle time. However since I repeat
that kind of tests hundreds of times, that means increasing testing time a
lot.

I think my problem is that I need to wait after the zmq_bind() and before
zmq_msg_send() some time to allow ZMQ background threads to actually
connect the PUB and SUB sockets together.
Is there a better way to test if there are pending connections in ZMQ
background threads rather than waiting a (random) amount of time?

------------------------------


If you could change to use XPUB socket, after binding you could wait for
the subscription message to know that the subscriber had connected.
_______________________________________________
zeromq-dev mailing list
[email protected]
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to