【发布时间】:2013-12-28 01:06:14
【问题描述】:
当我打开一个套接字连接时,我在打开套接字后立即将 socket.Close() 逻辑放在一个 defer 函数中。但是,如果 socket.Close() 会引起另一个恐慌怎么办?我是否应该总是在外部延迟中嵌套另一个延迟/恢复以防止我的程序崩溃?像这样:http://play.golang.org/p/GnEMQS-0jj
谢谢, 埃尔格斯
【问题讨论】:
-
socket.Close() 不会引起恐慌 IIRC。
-
我不太确定:关闭(例如在 net.TCPConn 上)可能会导致错误,但我认为它不会恐慌。如果它恐慌,例如由于硬件损坏或内存不足,您的应用程序无论如何都会被炸毁。根据您的情况,您可能想要处理返回的错误,但在 Close 中处理恐慌似乎有点偏执。
-
@FUZxxl 当我尝试关闭服务器拒绝连接的客户端套接字时,它会发生恐慌。有什么方法可以判断套接字是否可以安全关闭而不会惊慌。还是我必须为套接字关闭逻辑再嵌套一层延迟。
-
@ElgsQianChen 这看起来像 Go 中的一个错误。请在Go bugtracker 报告错误。