该io.Closer接口的文档说:第一次调用后关闭的行为是未定义的。具体的实现可能会记录他们自己的行为。anet.Conn的Close()功能呢?我可以安全地多次调用它吗?具体来说,我想知道我是否可以defer c.Close()提前返回错误,但仍然显式调用c.Close()而不是让客户端等待我完成后台处理。
1 回答

慕盖茨4494581
TA贡献1850条经验 获得超11个赞
嗯,net.Conn
是一个接口,所以要看具体的实现。
我检查了TCPConn
,UDPConn
和IPConn
structs 中的实现。它们似乎包含这个net.Conn
接口的实现。
这个实现将Close()
调用传播到它的底层文件描述符,这意味着在 Unix 系统上这个函数会被调用。
我们必须走得更低,因为下一个调用是文件描述符使用的互斥锁。
如果连接先前已关闭并释放互斥锁,则它似乎返回 false,并且文件描述符Close()
函数返回ErrNetClosing 错误。
所以,我可以自由地说,你不应该多次调用它,因为在我描述的这种情况下,它会返回一个错误。但它也可能不会在其他人中出错。正如文档所说 - 这是未定义的行为。
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消