【问题标题】:How to know which connection closed in "use of closed network connection" error如何知道在“使用关闭的网络连接”错误中关闭了哪个连接
【发布时间】:2023-03-25 19:06:01
【问题描述】:

我在 Go 中使用 io.Copy 代理 TCP 连接

_, err := io.Copy(src, dst)
if err != nil {
   log.Println(err)
}

一个连接关闭,因此发送此错误:

readfrom tcp 171.31.80.49:10000->88.39.116.204:56210: use of closed network connection

我如何知道哪个网络连接关闭?即171.31.80.49:1000088.39.116.204:56210

【问题讨论】:

  • 你能展示更多你的代码吗? srcdst 是什么?您可以在返回错误以获取一些信息之前对其进行注释吗?与fmt.Errorf("error copying data from x and Y: %w", err) 一样。
  • @maxm srcdst 都是 net.Conns。我应该如何记录它们,就好像你默认记录它不是人类可读的一样。

标签: go networking tcp


【解决方案1】:

TCP 连接是一对 IP 和端口对。在您的情况下,连接是171.31.80.49:10000->88.39.116.204:56210。它是连接,它是关闭的。没有连接171.31.80.49:1000088.39.116.204:56210

您的示例中有两个连接:srcdst(顺便说一下,您将它们命名为错误:https://pkg.go.dev/io#Copy)。如果您的问题是哪个连接正在关闭,那么根据错误消息,它是dst(应该命名为src)。

为什么?因为消息说:readfrom ...,所以当io.Copy 从 Reader 读取时发生错误,在我们的例子中是 dst

【讨论】:

  • 哇!很好的答案!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2019-03-21
  • 2021-12-10
  • 2017-05-24
  • 2015-02-27
  • 2015-05-17
相关资源
最近更新 更多