golang:client tls.Conn关闭钩子

时间:2017-11-04 17:33:40

标签: go network-programming

我正在与接受*tls.Conn的http客户端API进行交互。我无法更改API。我希望在连接关闭时执行一些代码,但我没有看到这样做的方法。如果我创建一个嵌入*tls.Conn和I"覆盖" Close(),API不接受结构,因为只跟随子类型是 - 与接口的关系 - tls.Conn 不是接口。

有没有办法解决这个问题 - 是否有一些标准的钩子可以用来在客户端连接关闭时收到通知?

1 个答案:

答案 0 :(得分:2)

如果你正在使用tls.Client来构建*tls.Conn,那么你可以包装第一个参数来实现你的目标。

type CloseListener struct {
    net.Conn // embed the original conn
}

func (c *CloseListener) Close() error {
    err := c.Conn.Close()
    // ... do your stuff ...
    return err
}

conn := tls.Client(&CloseListener{c}, &tls.Config{ /* ... */ }) 

如果你看一下tls.Conn's Close的实现方式,你会发现除非出现错误,否则应该调用你的Close实现。