The code for that method, in 2.2.0, looks very suspect. My advice is to use the 3.0.0 release or github master.
On Wed, Mar 18, 2015 at 2:06 PM, Arturo S. Garcia <[email protected]> wrote: > Hi All, > > I am using czmq-2.2.0, zeromq-4.0.5 and libsodium-1.0.2. > > I am tying to send a message using a publisher node and receive it using > zmsg_recv_nowait. The thing is that I do not know if I am doing something > wrong... Here is the code: > > Publiser: > > std::string data ("test"); > zmsg_t *mess = zmsg_new(); > zmsg_addmem(mess, data.c_str(), data.size()); > zmsg_send (&mess, _pub); > > Subscriber: > > zmsg_t *message2 = zmsg_recv_nowait (_subs); > if (message2) > { > zframe_t *content = zmsg_pop (message2); > // get message > char* char_msg = zframe_strdup(content); > data = std::string(char_msg,zframe_size(content)); > printf("Response: '%s'\n", data.c_str()); > } > > The problem is that I never receive a message in the subscriber. If I change > to zmsg_recv, then I am able to receive them. Is it possible that > zmsg_recv_nowait is not working properly? or I am using it in a wrong way? > Moreover, changing from zmsg_recv_nowait to zstr_recv_nowait also works > fine... > > I have modified the code of zmsg_recv_nowait in zmsg.c when the last message > frame is received by including frames++ because I noticed that the message > was actually received, but discarded becasue the frame counter is not > increased. Is this a mistake or this function was intended to be used with > more than one frame only? > > Here is the modified zmsg_recv_nowait: > zmsg_t * > zmsg_recv_nowait (void *zocket) > { > assert (zocket); > int frames = 0; > zmsg_t *self = zmsg_new (); > if (!self) > return NULL; > > while (true) { > zframe_t *frame = zframe_recv_nowait (zocket); > if (!frame) { > zmsg_destroy (&self); > break; // Interrupted or terminated > } > if (zmsg_append (self, &frame)) { > zmsg_destroy (&self); > break; > } > if (!zsocket_rcvmore (zocket)) > { > frames++; > break; // Last message frame > } > frames++; > } > return frames > 0 ? self : NULL; > } > > Any ideas? Thanks in advance. > > Regards, > Arturo > > _______________________________________________ > zeromq-dev mailing list > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > _______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
