如果Pid即将死亡,我是否应该打扰关闭套接字连接?

Bre*_*k89 4 erlang

当Pid死亡时,它会释放与之关联的所有文件句柄/端口.如果这个过程即将死亡我应该打扰调用gen_tcp:close或ssl:close之类的东西,即使它是最后一件事吗?

ceg*_*ult 7

"我应该打扰"你的意思是"我会冒内存泄漏的风险吗?",或"它可能导致数据丢失吗?",或者"它会影响客户端看到和关闭连接的方式吗?"

话虽如此,出于客户的考虑,发出关闭命令被认为是礼貌的.客户端可能会看到连接突然中断而不是关闭.例如,如果它是一个Web服务器,并且您没有发送关闭,那么某些浏览器会将其读作管道中断(错误)并立即尝试重新连接.正确关闭连接只是礼貌,它将有助于保持代码的逻辑组织(您确切知道如何处理所有资源).

我不是100%确定erlang如何处理垃圾收集,但我可以说对于大多数编程语言(因此我也假设是erlang),杀死进程会处理与之关联的所有内存,所以只是让进程死掉就不会有内存泄漏.

但是,如果缓冲区中有潜在的内容要发送到客户端,则可能需要执行退出过程,使其在关闭之前刷新缓冲区或连接,否则可能会导致数据丢失.

编辑:正如legoscia所提到的,任何打开的文件描述符都应该由erlang优雅地处理,但在退出进程之前,它永远不会伤害(我称之为"良好实践")自己关闭它们.