关闭 OTP 主管拥有的 gen_tcp 侦听套接字

Posted

技术标签:

【中文标题】关闭 OTP 主管拥有的 gen_tcp 侦听套接字【英文标题】:Closing a gen_tcp listen socket that is owned by an OTP supervisor 【发布时间】:2019-02-22 11:46:47 【问题描述】:

一些教程,包括这个Learn You Some Erlang,展示了 OTP 主管将打开并拥有一个 TCP 侦听套接字并将其共享给许多接受连接的工作人员的应用程序。

我的问题是,如何在没有终止/2 回调函数的情况下关闭主管拥有的侦听套接字?

【问题讨论】:

【参考方案1】:

套接字链接到拥有它的进程。如果该进程退出,则套接字将自动关闭。 (这适用于监听套接字和连接套接字。)

(拥有套接字的进程就是创建它的进程,除非您调用gen_tcp:controlling_process 重新分配套接字的所有权。)

【讨论】:

感谢您的回答!无论进程正常退出还是异常退出,它们都会自动关闭吗? 是的,两种情况都一样。

以上是关于关闭 OTP 主管拥有的 gen_tcp 侦听套接字的主要内容,如果未能解决你的问题,请参考以下文章

使用 gen_tcp 时的套接字接受率

如果达到超时,gen_tcp:recv/3 是不是会关闭套接字?

如何在 gen_tcp:accept 上调用(和睡眠)并同时处理系统消息?

gen_tcp:connect 将在使用 supervisor 时关闭

尽力而为的 OTP 监督

Erlang TCP 服务器总是在接受时关闭