我正在使用以下顺序实现简单的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)
Run Code Online (Sandbox Code Playgroud)
使用选项{active,true}可能会导致竞争条件,即在调用"controlling_process"之前新数据包到达套接字进程,这将导致{tcp,Socket,Data}消息到达父进程而不是儿童.
如何避免这种情况?
erlang ×1