如何在Erlang中的不同线程中从同一UDP端口接收数据?

如何在Erlang中的不同线程中从同一UDP端口接收数据?,erlang,udp,Erlang,Udp,当我尝试做以下事情时 init()-> 案例genu udp:open(10000,[二进制,{active,false}])的 {好的,套接字}-> startListen(5,插座); 结束。 startListen(0,套接字)-> 插座 startListen(N,套接字)-> Pid=spawn_链接(fun()->侦听(套接字)结束), startListen(N-1,插座)。 听(插座)-> 接收 {udp、套接字、主机、端口、数据}-> ... 结束。 它表明它不能从任何线程接

当我尝试做以下事情时

init()->
案例genu udp:open(10000,[二进制,{active,false}])的
{好的,套接字}->
startListen(5,插座);
结束。
startListen(0,套接字)->
插座
startListen(N,套接字)->
Pid=spawn_链接(fun()->侦听(套接字)结束),
startListen(N-1,插座)。
听(插座)->
接收
{udp、套接字、主机、端口、数据}->
...
结束。

它表明它不能从任何线程接收。我做错了什么,或者事实上在erlang是不可能的?

你做错了什么。当套接字不是活动套接字时,在这种情况下,您的5个进程必须自己显式调用
gen_udp:recv/2,3
,但我不能完全确定这是否有效。我想你会得到一个
{错误,而不是所有者}
返回

另一种可行的方法是让原始进程抓取数据包,然后将它们作为普通消息一次转发给您的工作人员。这将起作用,但您需要稍微修改代码

有关背景信息,请查看所有者或控制流程的概念。每个端口/套接字都有一个,如果所有者崩溃,套接字也会关闭