[zeromq-dev] how to hook ZMTP to prepend outputs and trim inputs ?

Laurent Alebarde l.alebarde at free.fr
Sat Jan 18 10:20:06 CET 2014


Thanks Pieter for your very informative answer.

Have a nice WE,

Laurent

Le 18/01/2014 08:18, Pieter Hintjens a écrit :
> TCP is a stream transport, not a message transport. There's no way to
> know how much data you will receive in any recv() call except to use
> your own framing (which is why ZMTP has a framing mechanism). If A
> sends 2,000 bytes to B, then B may receive them in anything from one
> to 2,000 pieces depending on network conditions.
>
> Inproc doesn't use send()/recv() at all. UDP is message based, so each
> recv() matches one send(). IPC is stream based, like TCP.
>
>
>
> On Fri, Jan 17, 2014 at 11:16 PM, Laurent Alebarde <l.alebarde at free.fr> wrote:
>> Thanks Pieter,
>>
>> I assume that when the message comes here:
>>
>> int zmq::stream_engine_t::write (const void *data_, size_t size_)
>>
>> which executes:
>>
>>      ssize_t nbytes = send (s, data_, size_, 0);
>>
>> the peer receives the same with the same number of recv commands ? Corollary
>> is that there is no data aggregation of two or more send in a buffer before
>> it goes on the wire, and on the other side recv gets the same size of data
>> than its send counterpart. Is it still true with all transports, in
>> particular inproc ?
>>
>> Sorry for the naivety of the question.
>>
>> Bonne nuit,
>>
>>
>> Laurent
>>
>> Le 17/01/2014 15:30, Pieter Hintjens a écrit :
>>
>> You can't add to a message without breaking ZMTP. What you could
>> conceivably do is inject command frames, and filter these out.
>>
>> On Fri, Jan 17, 2014 at 2:57 PM, Laurent Alebarde <l.alebarde at free.fr>
>> wrote:
>>
>> For trimming an incoming message, the very beginning of in_event looks like
>> the right place.
>> For prepending an outgoing message, I would guess out_event just at the
>> beginning of the if (!outsize) block. But I am not sure.
>>
>> What is the granularity of what is written with out_event / int nbytes =
>> write (outpos, outsize); , frame ? message ? several message possible ? part
>> of a frame possible ?
>>
>>
>> Le 17/01/2014 11:40, Laurent Alebarde a écrit :
>>
>> Hi Devs,
>>
>> I am doing some experiments (cf at the end for the goal) and wonder where I
>> could hook the beginning of a message both reading and writing.
>>
>> What I want to do is prepend an outgoing message and trim an incoming
>> message (for any mechanism looks simpler) when some option is set.
>>
>> Typically, when the option is set, when a new message is received, I want to
>> be able to store a certain amount of the first bytes in a new mechanism
>> buffer, and skip them. These bytes are experimental and not ZMTP, so I have
>> to skip or trim them to not hurt ZMTP. When a message is sent, I want to
>> initialise the buffer with a copy of what I previously stored before ZMTP
>> write the buffer. If it is outpos, I will do outpos += store_size;
>>
>> So, the question is where & when I should do that to not hurt ZMTP.
>>
>> FYI, The aim of this experiment is to manage to achieve CURVE proxying. My
>> investigations and tests so far lead me to prepend the client ID in every
>> message sent to the CURVE worker, and that the worker send back this
>> information.
>>
>> Cheers,
>>
>>
>> Laurent
>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>>
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140118/78b5b552/attachment.htm>


More information about the zeromq-dev mailing list