Erlang: Unikanie warunków wyścigu za pomocą gen_tcp: control_process
Implementuję prosty serwer tcp z następującą sekwencją:
{ok, LS} = gen_tcp:listen(Port,[{active, true}, {reuseaddr, true}, {mode, list}]),
{ok, Socket} = gen_tcp:accept(LS),
Pid = spawn_link(M, F, [Socket]),
gen_tcp:controlling_process(Socket, Pid)
Użycie opcji {active, true} może spowodować stan wyścigu, w którym nowy pakiet dociera do procesu gniazda, zanim zostanie wywołany „control_process”, co spowoduje, że wiadomość {tcp, Socket, Data} dotrze do procesu ojca zamiast dziecko.
Jak można tego uniknąć?