<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 31, 2017 at 4:04 PM, scott ribe <span dir="ltr"><<a href="mailto:scott_ribe@elevated-dev.com" target="_blank">scott_ribe@elevated-dev.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Oct 31, 2017, at 1:38 PM, Jesper Louis Andersen <<a href="mailto:jesper.louis.andersen@gmail.com">jesper.louis.andersen@gmail.<wbr>com</a>> wrote:<br>
><br>
> If you can, run with something like {packet, 4}. It is simple and works. Delimiters are worse because you have to scan for them and you often need to escape them in your payload. A Length-Value-Type encoding provides framing in which you don't have to scan and you don't need to escape. Putting the type last in the packet is debatable, but one advantage is that other languages have to allocate a full buffer which can often eliminate certain security-concerning bad implementations.<br>
<br>
</span>I like length-prefixed messages, and I like that Erlang has such direct & easy support built-in. I'm just going to suggest one more thing: add your own checksum at the end. In case there's any bug anywhere in decoding packets, this prevents the kind of error where you get out of sync and are then taking what should be message data as your 4 bytes of length.<br></blockquote><div>I think this is probably unnecessary since an implementation for something like {packet,4} is trivial to begin with so you will likely never see an issue with it. Not to mention UDP and TCP both have checksums checked by the OS anyway. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Admittedly, that is far less likely with OTP's built-in implementation than if you're writing your buffering and decoding. But it's also possible for a sender to send a bogus length, or maybe the length is right but it fails to send the last byte before sending the length of the next message...<br>
<span class="im HOEnZb"><br>
--<br>
Scott Ribe<br>
<a href="https://www.linkedin.com/in/scottribe/" rel="noreferrer" target="_blank">https://www.linkedin.com/in/<wbr>scottribe/</a><br>
<a href="tel:%28303%29%20722-0567" value="+13037220567">(303) 722-0567</a><br>
<br>
</span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div></div>