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?

questionAnswers(2)

yourAnswerToTheQuestion