<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>I am trying to make a UDP listener that will be supervised by a supervisor module (Just for learning purpose).  below id my Supervisor code:<div><br></div><div><div>-module(pdmanager_sup).</div><div>-behaviour(supervisor).</div><div> </div><div>-export([start_link/1]).</div><div>-export([init/1]).</div><div> </div><div>start_link(Port) -></div><div>supervisor:start_link({local,?MODULE}, ?MODULE, Port).</div><div> </div><div>init(Port) -></div><div>    {ok, {{one_for_one, 5, 60},</div><div>        [{listener,</div><div>            {pdmanager, start_link, Port},</div><div>            permanent, 1000, worker, [pdmanager]}</div><div>        ]}}.</div><div><br></div></div><div><br></div><div>And my udp listener (pdmanager) looks like the below:</div><div><br></div><div><div>-module(pdmanager).</div><div>-behaviour(gen_server).</div><div><br></div><div>-export([start_link/1]).</div><div>-export([init/1]).</div><div>-export([</div><div>    udplistener/1,</div><div>    handleudp/1</div><div>]).</div><div><br></div><div>-record(state, {socket}).</div><div><br></div><div>start_link(Port) -></div><div>    gen_server:start_link({local, pdmanager}, pdmanager, Port, []).</div><div><br></div><div>init(Port) -></div><div>    io:format("UDP Server starting ~n",[]),</div><div>    {ok, Socket} = gen_udp:open(Port, [binary, {active, false}]),</div><div>    spawn_link(pdmanager,udplistener,[Socket]),</div><div>    {ok, #state{socket=Socket}}.</div><div><br></div><div>udplistener(Socket) -></div><div>    {ok,Packet} = gen_udp:recv(Socket,0),</div><div>    {_,_,Msg} = Packet,</div><div>    if</div><div>        Msg /= "stop" -></div><div>            io:format("Stoping UDP listener ~n", []);</div><div>        true -></div><div>            spawn(pdmanager,handleudp,[Packet]),</div><div>            udplistener(Socket)</div><div>    end.</div><div>    </div><div>handleudp(Packet) -></div><div>    {_,_, Msg} = Packet,</div><div>    io:format("I have got message : ~s ~n",[Msg]),</div><div>    {handeling, Packet}.</div></div><div><br></div><div><br></div><div>Now: after compiling I start my program with :</div><div><br></div><div>pdmanager:start_link(5678).</div><div><br></div><div>It gets started and I can see the "UDP server starting" message in my screen. Next, when I send a message to UDP 5678 port I see the message "s<span style="font-size: 12pt;">toping UDP listener</span><span style="font-size: 12pt;">" as expected.  However, it doesnt restart my server.  I called udplistener/1 function from init/1 using spawn_link. I expected spawn_link will link the new process (udp listener) with the calling process (the worker process in this case) and if udplistener goes down the worker will go down aswell and that will cause the supervisor to restart the worker. However, I didnt work that way. </span></div><div><span style="font-size: 12pt;"><br></span></div><div><span style="font-size: 12pt;">How should I do it ? </span></div><div><span style="font-size: 12pt;"><br></span></div><div><span style="font-size: 12pt;"><br></span></div>                                    </div></body>
</html>