[zeromq-dev] Problem using inproc - What am I doing wrong?

Iggy Philly iggy.philly at hotmail.com
Sat Aug 25 15:41:50 CEST 2012


I've added the subscription to the code and am now sending multiple messages with no change in behavior. I also tried changing the transport from inproc to tcp and the problem remains (that change is commented out). So, I don't think it's an inproc problem. I can't help but think I'm missing something simple. Here's the code: #include <zmq.h>
#include <iostream>
#include <memory.h>
#include <assert.h>using namespace std;static void* startTestThread(void* context)
{
 void* socket = zmq_socket(context, ZMQ_SUB);
 assert(socket);
 int ret = zmq_connect(socket, "inproc://test");
 //int ret = zmq_connect(socket, "tcp://localhost:5555");
 assert(ret == 0);
 string filt = "test";
 zmq_setsockopt(socket, ZMQ_SUBSCRIBE, filt.c_str(), filt.length());
 //zmq_setsockopt(socket, ZMQ_SUBSCRIBE, NULL, 0); zmq_pollitem_t pollItem;
 pollItem.socket = socket;
 pollItem.events = 0;
 pollItem.fd = 0;
 pollItem.revents = ZMQ_POLLIN; while (1)
 {
  cout << "polling..." << endl;
  zmq_poll(&pollItem, 1, 1000);  if (pollItem.revents & ZMQ_POLLIN)
  {
   zmq_msg_t message;
   zmq_msg_init(&message);
   zmq_recvmsg(pollItem.socket, &message, ZMQ_DONTWAIT);
   std::string* s = new std::string((char*)zmq_msg_data(&message), zmq_msg_size(&message));
   zmq_msg_close(&message);
   cout << "s = '" << s << "'" << endl;
  }
 } return NULL;
} int main()
{
 void* context = zmq_init(1);
 void* socket = zmq_socket(context, ZMQ_PUB);
 assert(socket);
 int r = zmq_bind(socket, "inproc://test");
 //int r = zmq_bind(socket, "tcp://*:5555");
 assert(r == 0); cout << "STARTING THREAD" << endl;
 pthread_t testThread;
 pthread_create(&testThread, NULL, startTestThread, context); sleep(5); for (int i=0; i<10; i++)
 {
  string s = "test";
  zmq_msg_t msg;
  zmq_msg_init_size(&msg, s.length());
  memcpy(zmq_msg_data(&msg), s.c_str(), s.length());
  zmq_sendmsg(socket, &msg, ZMQ_DONTWAIT);
  zmq_msg_close(&msg);
  cout << "Message sent" << endl;  sleep(1);
 } while (true);
} 
 > Date: Sat, 25 Aug 2012 11:17:29 +0100
> From: ian.barber at gmail.com
> To: zeromq-dev at lists.zeromq.org
> Subject: Re: [zeromq-dev] Problem using inproc - What am I doing wrong?
> 
> On Sat, Aug 25, 2012 at 2:12 AM, Iggy Philly <iggy.philly at hotmail.com> wrote:
> >
> > I did try adding this (for several differnt filters including ""):
> >
> > string filt = "test";
> > zmq_setsockopt(socket, ZMQ_SUBSCRIBE, filt.c_str(), filt.length());
> 
> Yep, you need to add that in - by default SUB will reject all messages
> (so you don't get a full stream) unless you have set some matching up,
> which can be blank. You are waiting a good amount of time, so it
> should work if you put that back in, but try sending a few messages in
> a loop and see if you get any coming through - if not, update your
> code sample to include the subscribe sockopt and post it back to the
> list and we can take another look.
> 
> Ian
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20120825/5c6baa3e/attachment.htm>


More information about the zeromq-dev mailing list