2010-09-04 40 views
3

允许从一个进程读取数据,而另一个进程写入到Erlang的套接字中? 我试过了,它似乎工作,但我想知道它是否万无一失。从两个进程访问套接字

+0

谢谢大家的回答。 Summa summarum:多个进程可以安全地写入,但只有一个进程可以从套接字读取。 – mihannus 2010-09-05 20:53:33

回答

3

根据我对源代码的理解,一个(gen_tcp,至少)socket send/recv归结为发送的erlang:port_command和套接字端口上的recv的erlang:port_control(请参见prim_inet。 ERL)。

对于port_command:“如果端口繁忙,调用进程将被暂停,直到端口不再忙。” port_control也是一个同步操作。

纠正我,如果我错了,但它似乎是完全安全的使用多个进程来读取和写入套接字。

+2

虽然有一条评论,如果“拥有”过程死亡,那么套接字将关闭。所以这两个进程之间不是对称的使用。 – 2010-09-06 11:16:40

1

我很确定我记得这样做没有任何问题。

1

他们中的任何一个都可以编写,但如果您的所有进程都可以接收,则无意义。它会溢出所有不预期消息的邮箱。您只需要定义一个Pid来接收数据包,默认情况下它就是创建套接字的任何Pid。您可以通过设置控制进程来设置任何Pid来控制套接字。

+1

如果使用{active,false}和recv()从套接字获取数据会怎样?虽然我不确定,但我希望几个进程都可以调用recv(),这样可以正常工作。 – 2010-09-06 20:57:00

+0

这是真的。我很难想象在不同的​​进程调用recv的socket间传递。更好地使活动并有一个专门的循环接收{tcp,Sock,Data}。至少这是我习惯与他们合作的方式。 – 2010-09-09 02:16:14