[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