首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang:进程什么时候终止,gen_tcp:controlling_process(Socket,Pid)是如何工作的?

Erlang:进程什么时候终止,gen_tcp:controlling_process(Socket,Pid)是如何工作的?
EN

Stack Overflow用户
提问于 2013-03-18 07:57:03
回答 1查看 415关注 0票数 1

我想知道的是,如果控制进程是使用gen_tcp:controlling_process(Socket, Pid),创建的,当套接字关闭时,进程Pid是否会终止?套接字在什么情况下会发送此消息{tcp_closed, Socket}?有没有办法防止服务器端的套接字关闭,或者这总是正常的吗?另外,是否有任何特定的方法来终止知道Pid的进程

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-18 16:44:57

gen_tcp:controlling_process( Socket,Pid)用于将套接字的控制交给进程Pid。当套接字关闭时,这并不意味着该进程的行为。

有以下几种情况需要考虑:

在{,

  • }模式下打开服务器套接字,在这种情况下,当服务器调用函数gen_tcp:recv(Sock,Len)得到答案{error,closed}而不是预期的{ok,Binary}时,服务器将知道套接字已关闭。如果您打算使用gen_tcp:controlling_process( Socket,Pid),我建议您使用此模式,因为它允许您在代码中避免竞争条件。
  • 您以{active,true}或{active,once}模式打开服务器套接字,在这种情况下,服务器将收到消息{tcp_closed,Socket}。在这种情况下,存在竞争条件,请参阅主题Erlang: Avoiding race condition with gen_tcp:controlling_process

我不认为服务器的职责是阻止任何套接字关闭,而是始终准备接受连接。

最后,总是可以使用自己的协议来终止进程,例如Pid!{stop,Reason},或者使用exit(Pid,Reason)以更残酷的方式终止进程。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15467788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档