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