erl_interface and buffer overruns

Taj Khattra taj.khattra@REDACTED
Sun Aug 27 01:51:24 CEST 2006


On 8/26/06, Joel Reymont <joelr1@REDACTED> wrote:
> What is not clear is whether you can retry receiving the message if
> the buffer is too small or the message is lost on error. Any idea?

hmm... from reading the code i don't think erl_receive_msg() can
return EMSGSIZE since it passes in a resizable ei_x_buff to the lower
level ei_do_recv_msg() function.   if the user supplied buffer is too
small, it will only contain a truncated copy of the received data, but
the ErlMessage parameter will contain the complete decoded message.
erl_xreceive_msg() will grow the user supplied buffer if necessary, in
addition to decoding it.

in any case, i think erl_interface was deprecated a few releases ago?
you probably want to use ei_receive_msg() or ei_xreceive_msg().  the
former returns EMSGSIZE if the buffer is too small and discards the
message;  the latter grows the buffer if necessary.

http://www.erlang.se/doc/doc-5.5/lib/erl_interface-3.5.5/doc/html/ei_connect.html#ei_receive_msg/3



More information about the erlang-questions mailing list