supervisor, behaviour(application), rebar3

Papa Tana papa.tana101@REDACTED
Sun Jul 19 20:42:34 CEST 2020


Hi All,

I have the following straightforward UDP Server:

 - ONLY accept Data <<0:32>>,
 - otherwise it crash

-module(server).
-export([listen/1]).

listen(Port) ->
		spawn(fun()->run_it(Port) end).

run_it(Port) ->
	{ok, Skt} = gen_udp:open(Port, [binary]),
	loop(Skt).

loop(Skt) ->
	receive
		{udp, Skt, _, _, Bin} ->
			case Bin of
				<<0:32>> ->
					io:fwrite("~p~n", [{"Good Format: ", Bin}]),
			loop(Skt)
			end
	end.

Now, Client is going to send a malformed data.

I can write a case clause to match any message and simply ignore any
malformed message.

However, that would be a catch-all-clause, which will not help me if
there is eventual bugs.

I have read somewhere: "Don't program defensively, let it crash, then fix it".

=ERROR REPORT==== 19-Jul-2020::21:15:29.872000 ===
Error in process <0.93.0> with exit value:
{{case_clause,<<0>>},[{ggsn,loop,1,[{file,"ggsn.erl"},{line,16}]}]}

Cool, it crash, But I want my server to restart automatically anyway :-)

I have read also that a process called "supervisor" can monitor my
server and restarts it when it detects that it died.

So, I have used "rebar3" because it helped me a lot when I compile
several files with just 1 single line 'rebar3 compile'.

It creates automatically a /src/ with 3 files, but only 2 are
interesting me for now:
 - server_app.erl
 - server_sup.erl

Ok, I have read the documentations but I'm still far from understanding.

Can anyone advise please, or transform my 19 lines of code server.erl
to server_app.erl and supervised by a server_sup.erl?

N.B: I'm not looking for a gen_server, I see it a lot but am I
obligated to transform this to a gen_server also, or only
application+supervisor is ok for my requirement?

Thanks in advance,
Best Regards,


More information about the erlang-questions mailing list