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

Iggy Philly iggy.philly at hotmail.com
Sat Aug 25 16:30:06 CEST 2012


 Oh man. That was it. Thank you!
 Date: Sat, 25 Aug 2012 10:21:08 -0400
From: stu at compuserve.com
To: zeromq-dev at lists.zeromq.org
Subject: Re: [zeromq-dev] Problem using inproc - What am I doing wrong?


  
    
  
  
    Guessing you're not setting up your
      pollitem correctly. Try setting pollitem.events to ZMQ_POLLIN and
      pollitem.revents to 0.

      

      On 8/25/12 9:41 AM, Iggy Philly wrote:

    
    
      
      
        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

        
      
      

      
      

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

    
    

  


_______________________________________________
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/673a6f48/attachment.htm>


More information about the zeromq-dev mailing list