<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>