All,
I've been experimenting with the "zero copy" zmq::message_t constructor in
C++ and I'm a little surprised that it's not properly respecting the 'size'
parameter of the constructor.
My original code, that works just fine, is:
try {
zmq::message_t msg(aPayload.size());
memcpy(msg.data(), aPayload.data(), aPayload.size());
socket->send(msg);
} catch (std::exception & e) {
}
where the 'aPayload' was a std::string with the contents of the message. Pretty
simple.
When I changed the code to:
try {
zmq::message_t msg((void *)aPayload.data(),
aPayload.size(), recycle);
socket->send(msg);
} catch (std::exception & e) {
}
where 'aPayload' is still the std::string, and the function 'recycle' is just a
static method on my class:
static void recycle( void *data, void *hint );
and it all compiles and runs. So far so good.
The receiver has some problems, however. I haven't changed the code there
when I made this change, so it's fixed. But now when I receive the messages,
I'm seeing that they are off by a byte or two - more or less, seemingly
randomly. I include the expected message size in the message body as a check,
which is how I know how big it's *supposed* to be.
So the question is: Am I doing this right?
If so, then what can I do to get the zero-copy working?
For now, I've reverted to the first version and all is working just fine.
Thanks,
Bob ([email protected])
The Man from S.P.U.D.
We will write no code before it's designed.
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev