Roy,
I believe what's going on is the istringstream doesn't know where the
string ends because the frame doesn't end with a '\0'. Except when it
does by coincidence, which might be often enough that you get 1 a lot of
the time.
I don't know the best C++ idiom for this - maybe there's a way to limit
the number of bytes the istringstream will read to the number of bytes
in the stream?
On Sun, Aug 04, 2013 at 09:43:43PM +0800, Roy Liu wrote:
> Hi,
>
> I used PUB-SUB pattern to implement a data distribution.
>
> code as the following:
>
> 1. PUB
> zmq::context_t context (1);
> zmq::socket_t publisher (context, ZMQ_PUB);
> zmq::message_t message(1);
>
> void OnDataRcv()
> {
> _snprintf ((char *) message.data(), 1, "%d", 1);
> publisher.send(message);
> }
>
>
> 2.SUB
> zmq::context_t context (1);
> zmq::socket_t subscriber (context, ZMQ_SUB);
> subscriber.connect("tcp://localhost:5556");
> subscriber.setsockopt(ZMQ_SUBSCRIBE, NULL, 0);
>
> int msg;
> while(true){
> zmq::message_t ticker;
> subscriber.recv(&ticker);
> std::istringstream iss(static_cast<char*>(ticker.data()));
> iss >> msg;
> std::cout << msg << std::endl;
> }
>
> In SUB, I often get msg as "-858993460". It looks like a pointer error.
> But occasionally, I can get the right msg as "1".
> This is why?
> Anyone can help me?
> _______________________________________________
> 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