<div dir="ltr">I've been wrestling with creating a proper gen* structure is also a listening socket server, and I got most everything down except one thing.<br><br>i have a supervisor (Sup) to keep track of connection handler (gen_server) processes.  This supervisor has no children at init time.<br>
<br>in my (non-gen*) acceptor process, I accept a socket, then do: <br>supervisor:start_child(Sup,{clientspec marked as temporary})<br><br>that child process(handler) is then handed the Socket and the acceptor process gives control to the handler.<br>
<br>if I do supervisor:which_children(Sup) i see it there, and it's doing it's thing (handle_info({tcp,Socket,<<blah>>}))<br><br>now, when the remote side drops the socket, I get the {tcp_closed,Socket} info message and want to stop my gen_server.<br>
<br>if I return (from handle_info):<br>{stop,normal,State}<br><br>the pid dies, but the supervisor:which_children still shows it as registered, but the pid is now listed as undefined.<br><br>seems like it saw it die, just didn't remove it from the child list.<br>
<br>if I cal supervisor:delete_child(Sup,self()) before returning {stop,normal,State} from handle_info I get a norpc error.<br><br>is there a proper way to have a supervisor with dynamic gen_server children that suicide?<br>
<br>thanks,<br><br>-david<br><br></div>