oh dear!
there is a lot wrong with this, but let me just answer your question:

your a.out hangs because the subscriber is waiting on a message that hasn’t 
been sent yet.

it works as two processes because the sender gets to send the messages that the 
subscriber is waiting for.

On Dec 10, 2013, at 2:43 AM, Rahul Mathur <[email protected]> wrote:

> All,
> 
> Below code is working fine when SSOMSSub () and SSOMSPub () API are written 
> as separate two files (sub.cpp and pub.cpp) but it doesn't execute properly 
> when both API SSOMSSub () & SSOMSPub () are written in same single test1.hpp 
> file as below and this file being called by driver file test.cpp as extreme 
> below -
> 
> ---test1.hpp----
> #include <iostream>
> #include <sstream>
> #include <cstdio>
> #include <cstdlib>
> #include <string>
> #include "zmq.hpp"
> #include "zmq_utils.h"
> 
> using namespace std;
> 
> struct MessageStruct {
>         int     UniqueID;
>         short   ProClientIndicator;
>         char    AccountNumber;
>         short   ORDERTYPE;
>         char    Symbol;
>         int     Volume;
>         int     Price;
>         short   Buy_Sell;
> } ss_oms_call;
> 
> class Test {
> 
> public:
>         int SSOMSSub ();
>         int SSOMSPub ();
> };
> 
> int Test::SSOMSSub () {
>         zmq::context_t context (1);
> 
>         std::cout << "Collecting updates from Strategy Server.\n" << 
> std::endl;
>         zmq::socket_t subscriber (context, ZMQ_SUB);
>         subscriber.connect("tcp://localhost:5556");
> 
>          const char *filter = "";
>         subscriber.setsockopt(ZMQ_SUBSCRIBE, filter, strlen (filter));
> 
>         int update_nbr;
>         for (update_nbr = 0; update_nbr < 100; update_nbr++) {
>                 zmq::message_t update;
>                 subscriber.recv(&update);
>                 std::istringstream iss(static_cast<char*>(update.data()));
>                 iss >> ss_oms_call.UniqueID >> ss_oms_call.ProClientIndicator 
> >> ss_oms_call.AccountNumber >>
>                         ss_oms_call.ORDERTYPE >> ss_oms_call.Symbol >> 
> ss_oms_call.Volume >> ss_oms_call.Price >>
>                         ss_oms_call.Buy_Sell;
> 
>         }
>         std::cout << "The Unique ID is .."<< filter <<ss_oms_call.UniqueID<< 
> std::endl;
>         std::cout << "The Type of Account is .."<< filter 
> <<ss_oms_call.ProClientIndicator<< std::endl;
> 
>         std::cout << "The AccountNumber is .."<< filter 
> <<ss_oms_call.AccountNumber<< std::endl;
> 
>         std::cout << "The ORDERTYPE is .."<< filter <<ss_oms_call.ORDERTYPE<< 
> std::endl;
> 
>         std::cout << "The Symbol is .."<< filter <<ss_oms_call.Symbol<< 
> std::endl;
> 
>         std::cout << "The Volume is .."<< filter <<ss_oms_call.Volume<< 
> std::endl;
> 
>         std::cout << "The Price is .."<< filter <<ss_oms_call.Price<< 
> std::endl;
>         std::cout << "The Buy or Sell is .."<< filter 
> <<ss_oms_call.Buy_Sell<< std::endl;
> 
>         return 0;
> }
> 
> int Test::SSOMSPub () {
>         zmq::context_t context (1);
>         zmq::socket_t pubs (context, ZMQ_PUB);
> 
>         pubs.bind("tcp://*:5556");
>         pubs.bind("ipc://ssoms.ipc");
> 
>         while (1) {
>                 ss_oms_call.UniqueID = 10001;
>                 ss_oms_call.ProClientIndicator = 1;
> 
>                 ss_oms_call.AccountNumber = '4';
> 
>                 ss_oms_call.ORDERTYPE = 0x0000;
> 
>                 ss_oms_call.Symbol = 0x4e;
> 
>                 ss_oms_call.Volume = 50;
> 
>                 ss_oms_call.Price = 625000;
>                 ss_oms_call.Buy_Sell = 2;
> 
>                 zmq::message_t message(1000);
> 
>                 snprintf ((char *) message.data(), 1000 , "%d %hu %x %hu %x 
> %d %d %hu ", ss_oms_call.UniqueID,
>                 ss_oms_call.ProClientIndicator, ss_oms_call.AccountNumber, 
> ss_oms_call.ORDERTYPE, ss_oms_call.Symbol,
>                 ss_oms_call.Volume, ss_oms_call.Price, ss_oms_call.Buy_Sell);
> 
>                 pubs.send(message);
>         }
>         return 0;
> }
> ----
> 
> and driver file (test2.cpp) -
> 
> ---
> #include <iostream>
> 
> #include "test1.hpp"
> 
> int main () {
> 
>         Test tst;
>         tst.SSOMSSub ();
>         tst.SSOMSPub ();
> 
> return 0;
> }
> --
> 
> It's execution hangs as -
> $ ./test2
> Collecting updates from Strategy Server.
> 
> --
> 
> Any clue. 
> 
> Thanks!!
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev


-----------------------
Andrew Hume
949-707-1964 (VO and best)
732-420-0907 (NJ)
[email protected]



_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to