OTP/TCP server recommendation

tty@REDACTED tty@REDACTED
Wed Aug 10 19:48:35 CEST 2005


Hello,

I am writing an OTP application which requires starting a TCP based server for incoming requests. I want this TCP server to be under a supervisor (for restarts etc).
What is the 'best practice' for this scenario ?

At this moment I have a 'portal' module which looks something like this :

    ===============================================

start_link() ->
    gen_server:start_link({local, ?MODULE}, 
                          ?MODULE, [], []),
    gen_server:cast(?MODULE, server).

init(_Args) ->
    {ok, #state{}}.

handle_cast(server, _State) ->
    server(),
    {noreply, #state{server = ?SERVER, 
                     port = ?PORT}}.

server() ->
    {ok, LSock} = 
         gen_tcp:listen(5600, [binary, {packet, 0}]),
    server(LSock).

server(Socket) ->
    {ok, Sock} = gen_tcp:accept(Socket),
    receive
	{tcp, Sock, Data} ->
	    % do stuff with Data
    end,
    gen_tcp:send(Sock, 
           list_to_binary("all is well\n")),
    gen_tcp:close(Sock),
    server(Socket).

    ===============================================

Although the above works I find it somewhat ugly.

Thanks in advance.

Tee 



More information about the erlang-questions mailing list