登录
首页 >  Golang >  Go问答

go的net.Close()是幂等的吗?

来源:stackoverflow

时间:2024-02-27 22:59:07 138浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《go的net.Close()是幂等的吗?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

io.Closer 接口的文档说:

第一次调用后 Close 的行为未定义。具体的 实现可以记录它们自己的行为。

net.ConnClos​​e() 函数怎么样?我可以安全地多次调用它吗?

具体来说,我想知道是否可以 defer c.Close() 以防我提前返回错误,但仍然显式调用 c.Close() 而不是让客户端等待我完成后台处理。


解决方案


嗯,net.Conn是一个接口,所以要看具体的实现。

我检查了 TCPConnUDPConnIPConn 结构中的实现。它们似乎包含 this implementationnet.Conn 接口。

此实现将 Clos​​e() 调用传播到其底层文件描述符,这意味着在 Unix 系统上将调用 this function

我们必须走得更低,因为下一个调用是文件描述符使用的互斥体。

如果之前关闭了连接并释放了互斥体,则似乎返回 false,文件描述符 Clos​​e() 函数返回 ErrNetClosing error

因此,我可以自由地说,您不应多次调用它,因为在我描述的这种情况下它会返回错误。但在其他方面也可能不会出错。正如文档所说 - 这是未定义的行为。

今天关于《go的net.Close()是幂等的吗?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>