Tue Apr 6 15:12:15 CEST 2021
On 2021/04/05 22:42, Avinash Dhumane wrote:
> I am taking a short-cut to inquire this, by posting to you all (than
> going through relevant documentation).
Oh! The humanity!
> Is gen_udp:recv() to be invoked per datagram, or can it return a binary
> of multiple datagrams concatenated?
It returns a single datagram with some meta about the transmission
(port, address, etc.).
> I am asking this because there is Length to recv(), and I don’t
> understand why it is there. Should it specify the length of expected
> datagram? What if the datagrams of variable length? Should it, then,
> specify the maximum length?
This goes back to memory allocation issues when you are allocating
memory manually. How much is the max size you want to receive might be
based on the size of the buffer you're willing to set aside for the
incoming data -- not the kind of thing people have to contemplate as
carefully as they did in earlier eras of networking.
There are some other lower level UDP dials and knobs that allow you to
peek at the size and UDP headers and whatnot to figure out what a
reasonable balance between getting an entire datagram, being safe, and
not being wasteful might be -- and typically you know what protocol
you're working with.
Anyway, in Erlang this is pretty much irrelevant. The common way to
receive UDP traffic (and TCP traffic, for that matter) is to leave all
the low level stuff to the runtime and inside your code just receive it
as an Erlang message and not deal with udp:recv/2,3 at all.
More information about the erlang-questions