<div dir="ltr">Hi,<div><br></div><div>I learn gen_tcp from learnyousomeerlangg book. I try to understand flow of code below. </div><div>And i got confused with acceptor/1 . Because acceptor/1 call itself but have no base case and just execute once. It's not usual. Why? <br>From my understanding it should be an infinity recursive.<br><div><br></div><div><font face="courier new, monospace">-module(naive_tcp).<br>-compile(export_all).<br><br>start_server(Port) -><br>  Pid = spawn_link(<br>    fun() -><br>      io:format("Spawned at start_server()~n"),<br>      {ok, ListenSocket} = gen_tcp:listen(Port, [binary, {active, false}]),<br>      spawn(fun() -> acceptor(ListenSocket) end),<br>      timer:sleep(infinity)<br>    end<br>  ),<br>  {ok, Pid}.<br><br>acceptor(ListenSocket) -><br>  io:format("I am acceptor~n"),<br>  {ok, AcceptorSocket} = gen_tcp:accept(ListenSocket),<br>  spawn(fun() -> acceptor(ListenSocket) end),<br>  handle(AcceptorSocket).<br><br>handle(AcceptorSocket) -><br>  inet:setopts(AcceptorSocket, [{active, once}]),<br>  receive<br>    {tcp, AcceptorSocket, <<"quit", _/binary>>} -><br>      gen_tcp:close(AcceptorSocket);<br>    {tcp, AcceptorSocket, Message} -><br>      gen_tcp:send(AcceptorSocket, Message),<br>      handle(AcceptorSocket)<br>  end.</font><br></div><div><br></div><div>Please enlightenment </div></div><div><br></div><div>Thank you </div><div><br></div><div><br></div></div>