Erlang: Evitando a condição de corrida com gen_tcp: controlling_process
Estou implementando um servidor tcp simples com a seguinte sequência:
{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)
Usar a opção {active, true} pode causar uma condição de corrida em que um novo pacote chega ao processo de soquete antes do "controlling_process" ser chamado, o que resultaria na chegada da mensagem {tcp, Socket, Data} ao processo pai em vez do criança.
Como isso poderia ser evitado?