Erlang: избегание состояния гонки с помощью gen_tcp: control_process
Я реализую простой TCP-сервер со следующей последовательностью:
{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)
Использование параметра {active, true} может вызвать состояние состязания, при котором новый пакет поступает в процесс сокета до того, как & quot; control_process & quot; вызывается, что приводит к тому, что сообщение {tcp, Socket, Data} поступает в родительский процесс вместо дочернего.
Как этого можно избежать?