Erlang: evitar la condición de carrera con gen_tcp: control_process
Estoy implementando un servidor TCP simple con la siguiente secuencia:
{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)
El uso de la opción {activo, verdadero} podría causar una condición de carrera donde un nuevo paquete llega al proceso del socket antes de que se llame al "control_process", lo que resultaría en que el mensaje {tcp, Socket, Data} llegara al proceso padre en lugar del niño.
¿Cómo podría evitarse esto?