【问题标题】:golang: client tls.Conn Close hookgolang: 客户端 tls.Conn 关闭钩子
【发布时间】:2017-11-04 17:33:39
【问题描述】:

我正在与接受*tls.Conn 的http 客户端API 进行交互。我无法更改 API。我希望在连接关闭时执行一些代码,但我看不到这样做的方法。如果我创建一个嵌入 *tls.Conn 的结构并“覆盖”Close(),API 将不接受该结构,因为 go 只遵循子类型 is-a 与接口的关系 - tls.Conn不是界面。

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

【问题讨论】:

  • 您是在自己构建*tls.Conn 吗?还是在将其传递给 API 之前将其准备好?
  • 构建自己

标签: go network-programming


【解决方案1】:

如果您使用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 实现,除非出现错误。

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多