gen_tcp:connect will close when using supervisor.

George Hope <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <[email protected]>
I have a simple gen_server which connects to a tcp port, when I run gen_server directly:

erl -noshell  -s ttest start

it works fine, But when I run:

erl -noshell -s tt_sup start_link 

the connection will be closed instantly, it will work if I unlink the supervisor.

How could I run my simple gen_server with supervisor ?





-module(tt_sup).

-behaviour(supervisor).

-export([init/1, start_link/0, start_shell/0]).



start_link() ->

    io:format("Supervisor started with PID~p~n", [self()]),

    {ok, Pid} = supervisor:start_link(tt_sup, []),

    io:format("Supervisor PID=~p~n", [Pid]),

    {ok, Pid}.



start_shell() ->

    io:format("Supervisor started with PID~p~n", [self()]),

    {ok, Pid} = supervisor:start_link(tt_sup, []),

    io:format("Supervisor PID=~p~n", [Pid]),

    unlink(Pid),

    {ok, Pid}.



init(_Args) ->

    SupFlags = #{strategy => one_for_one},

    Child = [#{id => ttest, start => {ttest, start, []},

               restart => permanent, shutdown => brutal_kill,

               type => worker, modules => [ttest]}],

    {ok, {SupFlags, Child}}.





-module(ttest).

-export([start/0,init/1,handle_cast/2,handle_call/3,handle_info/2,terminate/2,connect/1]).

-behaviour(gen_server).



start() ->

       io:format("gen_server start id is ~p~n",[self()]),

       {ok,Pid} = gen_server:start_link({local,ttest},ttest,[],[]),

       io:format("gen_server id is ~p~n",[Pid]),

       connect(Pid),

       {ok,Pid}.



init(_Args) ->

    io:format("init id is ~p~n",[self()]),

        {ok,[]}.       

handle_call({tcp,Socket,Bin},_From,States) ->

        {reply,States,States}.

handle_info({tcp,Socket,Bin},States) ->

        io:format("got info msg"),

        {noreply,States}.



handle_cast({send,Msg},States) ->

        {reply,States}.



connect(I) ->

    io:format("connect id is ~p~n",[self()]),

        {ok,Socket} =gen_tcp:connect("localhost",6000,[binary,{active,true}]),

        gen_tcp:controlling_process(Socket,I).



terminate(shutdown, State) ->

    io:format("terminating"),

    ok.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.