<div dir="ltr">Hi,<div><br></div><div>In C, a buffer is represented by a pointer. Pointers do not carry size information, and there is no means by which you know where the end-of-buffer is. Hence, it is C-idiomatic to supply another argument, bufsize, indicating the size of the buffer the pointer is pointing at.</div><div><br></div><div>If you give a too small bufsize, you are not going to use up the whole buffer. If you give a too large bufsize, you will overwrite data after the buffer in memory. This is wrong and usually leads to program crashes. Also, allocation checkers will detect this for you and warn you that your program is wrong.</div><div><br></div><div>If the message does not fit into the buffer, the call will fail and set and error indicating that the message is too large to fit inside the buffer. You could then try to extend the buffer and try again.</div><div><br></div><div>The xreceive call assumes the buffer is allocated by malloc. If it doesn't fit, the call will create a buffer large enough for the message and reallocate. This is why the types are different: you supply the addresses of the buffer pointer and the bufsize counter. Hence the call can update the contents of those addresses with the newly formed buffer, should it decide to move them.</div><div><br></div><div>The reason both calls exist is because it isn't always the case that the buffer will be allocated by malloc on the heap. You may statically allocate the buffer, or allocate it on the stack, for instance.</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Aug 31, 2017 at 8:18 PM Lukas Rieder <<a href="mailto:l.rieder@gmail.com" target="_blank">l.rieder@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif">Hello everyone,</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">I have a question about the bufsize argument in the erl_receive_msg function provided in erl_connect.</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">I do not quite understand what impact a given bufsize has on the operation of a C-Node.</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Is it limiting the amount of data that can be transferred to a C-Node?</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Quickly trying some things out, with a buffer size of 1000 chars, I could send messages to the C-Node back and forth, that are way bigger than a 1000 char buffer.</div><div class="gmail_default" style="font-family:georgia,serif">So I suspect the buffer is only a "buffer" and not limiting anything per se.</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">But what is a good bufsize?</div><div class="gmail_default" style="font-family:georgia,serif">And when does one use erl_xreceive_msg over erl_receive_msg?</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">I could not find any good examples on the internet on erl_xreceive_msg.</div><div class="gmail_default" style="font-family:georgia,serif">The implementations I found that are using erl_receive_msg all are using a bufsize of 1000.</div><div class="gmail_default" style="font-family:georgia,serif">I would be very happy, for my own understanding, if someone can give me some hints or explanation on making these choices.</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Kind regards,</div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif"><br></div><div class="gmail_default" style="font-family:georgia,serif">Lukas Rieder</div></div>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div></div>