[zeromq-dev] zmsg.hpp
Ilja Golshtein
ilejncs at narod.ru
Wed May 4 13:44:40 CEST 2011
04.05.2011, 15:33, "Martin Lucina" <mato at kotelna.sk>:
> ilejncs at narod.ru said:
>
>> Actually I still don't understand if it is guaranteed 0 is present, or code like
>> ==
>> char s[VERY_LONG];
>> sock.recv(&msg);
>> strcpy(s, msg.data());
>> s[msg.length()] = 0;
>> ==
>> relies on the destiny.
>>
>> Asking just out of curiosity.
>
> Quoting zmq(7):
>
> "A 0MQ message is a discrete unit of data passed between applications or
> components of the same application. 0MQ messages have no internal structure and
> from the point of view of 0MQ itself they are considered to be opaque binary
> data."
>
> Opaque binary data is just that. No guarantees on format, it's the
> application that defines it.
>
> Cf. also the FAQ "Does ØMQ include APIs for serializing data to/from the
> wire representation?" at http://www.zeromq.org/area:faq.
>
> In other words, if A (a C application) sends B (a C application) an ASCIIZ
> string, the \0 will be there on B's end. If A' (a Python application) sends
> B a Python string, the \0 will NOT be there on B's end.
>
> If you want portable data formats you need to define one and stick to it
> :-)
Yes, of course.
What I don't understand is why Pieter confirmed that
the code pretty much like quoted is valid and "s[msg.length()] = 0;" makes sense.
The only way to explain is to assume 0 is present somewhere after a message.
In this case strcpy is safe, though string must be properly terminated after copy.
Again, it is just curiosity - I want portable data formats and applications do not crash ;)
--
Best regards,
Ilja Golshtein.
More information about the zeromq-dev
mailing list