Interrupting passive socket recv
Samuel Tardieu
sam@REDACTED
Thu Dec 14 17:58:26 CET 2000
On 14/12, Sean Hinde wrote:
| It's still pretty horrible to kill or have to timeout all the time though.
| What do you set your timeout to out of interest?
I use 3 seconds in mod_erl, but I really disklike that (one of the first
things I teach my students is to *never* do any busy waiting or things
like that).
This leads to this ugly structure, that allows the listening process to be
but in a supervision tree (with a non-neglectable shutdown time, since
it may take up to 3 seconds + epsilon to answer the system message).
listener (Parent, Debug, State) ->
receive
{system, From, Msg} ->
sys:handle_system_msg (Msg, From, Parent, ?MODULE, Debug, State);
{'EXIT', Parent, Reason} ->
exit (Reason);
{get_modules, From} ->
From ! {modules, [?MODULE]},
listener (Parent, Debug, State);
_Other ->
listener (Parent, Debug, State)
after 0 ->
case gen_tcp:accept (State#state.sock, 3000) of
{ok, NS} ->
{ok, Pid} =
supervisor:start_child (eerl_workers,
[NS, Debug]),
gen_tcp:controlling_process (NS, Pid),
listener (Parent, Debug, State);
{error, timeout} ->
listener (Parent, Debug, State);
{error, Reason} ->
exit (Reason)
end
end.
More information about the erlang-questions
mailing list