* ZEROMQ VERSION
- 4.1.4
- 4.1.5
* SYSTEM
- RHEL 6.8 on x86_64
- Ubuntu 16.04 on x86_64
* TEST CASE (see attachment)
create PUB socket
bind endpoint
create SUB socket
subscribe all
connect endpoint
wait a little for connection to take place
send message with two frames through PUB
check SUB has data with zmq_poll
unsubscribe SUB from all
disconnect SUB from endpoint
receive frame 1 from SUB
receive frame 2 from SUB
* EXPECTED BEHAVIOR
get message with two frames
* ACTUAL BEHAVIOR
trying to retrieve the second frame of the message with zmq_msg_recv
triggers the assertion in src/fq.cpp:117.
$ ./p1
[26499] bound PUB to tcp://*:23456
[26499] subscribed SUB to all
[26499] connected SUB to tcp://localhost:23456
[26499] sent message through PUB
[26499] polled SUB socket: there is data
[26499] unsubscribed SUB from all
[26499] disconnected SUB from tcp://localhost:23456
[26499] receiving from sub...
[26499] reading frame 1 from sub...
[26499] received frame 1 through sub: data in first frame
[26499] reading frame 2 from sub...
Assertion failed: !more (src/fq.cpp:117)
Aborted (core dumped)
* NOTE
everything works fine without the zmq_disconnect
* OTHER CASES WITH SAME ASSERTION
http://lists.zeromq.org/pipermail/zeromq-dev/2016-September/030839.html
https://github.com/zeromq/libzmq/issues/1143
* WHY WOULD SOMEONE DISCONNECT A SUB SOCKET WITH DATA?
Nodes can be added or removed. Some messages are commands to connect or
disconnect those nodes.
* ADDITIONAL QUESTION
by the time I fetch the message from the SUB socket, I already
expressed my
disinterest with ZMQ_UNSUBSCRIBE.
Should the SUB socket give me a message that doesn't match the currently
defined filters?
The specification at
https://rfc.zeromq.org/spec:29/PUBSUB/
is not clear to me.
zmq-sub-disconnect-recv-bug.tar.gz
Description: application/gzip
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
