【问题标题】:Golang TCP error wsarecvGolang TCP 错误 wsarecv
【发布时间】:2015-11-29 03:57:27
【问题描述】:

我正在编写一个监听tcp connection(见this example)的应用程序。当tcp connection 断开连接时出现错误read tcp ip_server.:port1->ip_client:port2: wsarecv: An existing connection was forcibly closed by the remote host. 我预计会出现错误 EOF 和超时(对于 conn.SetReadDeadline())并尝试使用此代码捕获错误:

if err != nil {     
    log.Println("getting error from listener")
    // I thought, listener can continue work another cases
    if neterr, ok := err.(net.Error); ok && neterr.Timeout() || err == io.EOF {
        log.Println("Closing connection...")
        break // connection will be closed 
    }
}

有人知道这个错误吗?您知道如何捕获此错误以及何时发生此错误吗?提前致谢!

【问题讨论】:

标签: tcp go


【解决方案1】:

此错误的通常原因是您通过已被对等方关闭的连接发送数据。换句话说,应用程序协议错误。

【讨论】:

  • @Ulug'bekRo'zimboyev,两种简单的查找方法:a) 查看 Go net 包源或 b) 使用 log.Printf("%T %+v", err, err) 格式化/打印完整类型和完整err 中包含的信息,当它发生时,它将告诉您需要用什么代码替换 Printf
  • 您找到此消息的类型了吗?
  • 我得到*net.OpError read tcp ip_server.:port1->ip_client:port2: wsarecv: An existing connection was forcibly closed by the remote host.,所以消息的类型应该是*net.OpError
  • @Ulug'bekRo'zimboyev 最终它是 ECONNRESET。我不知道 go 中映射到什么,但你可以查一下。
  • 当我通过kubectl -n argo-events port-forward deployment/argo-server 2746:2746转发Argo服务器的端口时有时会发生这种情况如何解决?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2017-02-22
相关资源
最近更新 更多