在普通的Go HTTP处理程序上,如果我在仍然写入响应的同时断开了客户端的连接,http.ResponseWritter.Write
则会返回一条错误消息,如write tcp 127.0.0.1:60702: connection reset by peer
。
现在,从syscall
包中获得sysca.ECONNRESET
,其中包含消息connection reset by peer
,因此它们并不完全相同。
我该如何匹配它们,所以我知道如果发生这种情况不要惊慌?在其他方面,我一直在做
if err == syscall.EAGAIN {
/* handle error differently */
}
例如,效果很好,但我无法做到syscall.ECONNRESET
。
更新:
因为我迫切需要一个解决方案,所以暂时我将做这个非常肮脏的hack:
if strings.Contains(err.Error(), syscall.ECONNRESET.Error()) {
println("it's a connection reset by peer!")
return
}
例如,您得到的错误具有基础类型*net.OpError
,在此处构建。
您应该能够将错误键入其具体类型,例如:
operr, ok := err.(*net.OpError)
然后访问其Err
字段,该字段应对应于您所需的syscall错误:
operr.Err.Error() == syscall.ECONNRESET.Error()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句