Golang TCP 错误 wsarecv

Posted

技术标签:

【中文标题】Golang TCP 错误 wsarecv【英文标题】:Golang TCP error 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 
    

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

【问题讨论】:

不是 Go 而是同样的错误:***.com/questions/2582036/… 【参考方案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服务器的端口时有时会发生这种情况如何解决?

以上是关于Golang TCP 错误 wsarecv的主要内容,如果未能解决你的问题,请参考以下文章

golang 在下载依赖包的时候出现错误:dial tcp 142.251.42.241:443: i/o timeout

Golang 网络编程丝绸之路 - TCP/UDP 地址解析

golang 获取tcp连接的文件描述符fd

golang 关于处理TCP连接和设置超时的Golang示例。

Golang 从入门到放弃

golang中tcp socket粘包问题和处理