Ah, I see.

So creating another message entirely does the trick and I'm seeing multiple messages received now.
However it leaves me a bit curious because the result of s.send(msg) in both cases was 1.

[m] s.send(msg_1): 1, data: fsm.t|This is a test (fsmd.cpp:50 in main) I
[m] s.send(msg_2): 1, data: fsm.p|This is a test (fsmd.cpp:52 in main) I
[m] s.send(msg_3): 1, data: fsm.t|This is a test (fsmd.cpp:54 in main) I

According to the manual "The zmq_send() function shall return zero if successful. Otherwise it shall return -1" so the manual is incorrect perhaps?

On 04/08/2010, at 1:48 PM, Chuck Remes wrote:

On Aug 3, 2010, at 10:33 PM, Michael Small wrote:

I've observed strange behaviour in my initial testing of pub/sub.

The relevant subscriber code:

while(s.recv(&msg)) {
          printf("Received: %s\n", (char*)msg.data());
      }

And the publish code:

s.send(msg);
s.send(msg);
getchar();

The first message is received, but the second is not. If I kill the publisher and restart (leaving the subscriber active), again the first message is received, but not the second.
Is there some semantic of this pattern that I'm not aware of?

This is being tested on an OS X 10.6.4 box.

As soon as you hand off a message to 0mq, it becomes the owner of the message lifecycle. Under the covers that "msg" is released, so the second send is very likely not succeeding due to the message no longer existing. You should check the return codes of each send to be sure.

cr

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev