两台 aws 服务器,一个发起连接,一个接收连接。双方之间至少保持一个 tcp 连接。
出故障时 发起新连接端报 “ the network location cannot be reached ”错误。现存的连接报“ the specified network name is no longer available ”。整个网络完全中断,故障时任务管理器网络流量变成 0 。等进一分钟后网络连接恢复。
https://ww2.sinaimg.cn/large/413e37cagw1f41lvlb5pgj20ig02r750.jpg
接收方现存的连接报“ wsarecv: an existing connection was forcibly closed bu the remote host.”
由于故障出现随机,目前没有抓到包,只有日志。
软件是自己写的,建立连接用的
net.DialTimeout("tcp", RAddr, NEW_CONN_TIMEOUT * time.Second)
接收方是标准的新协程循环 c, e := ln.Accept() + go handlerConn(c) 。
很普通的 tcp 代码。
对了,还有一个奇怪的地方, tcp 发起端建立的连接经常读到“ the specified network name is no longer available ”错误,既不是读超时,也不是 EOF 。 正常情况下连接应该是长时间无数据读超时关闭或者是远端关闭,不应该碰到“ the specified network name is no longer available ”。 golang http 实现被人报告过这个问题, golang 解决办法是直接把他当作 EOF 来处理的... 复现 “ the specified network name is no longer available ” 的方法是直接强制关闭对端的程序,本端就会报“ the specified network name is no longer available ”。
从网络上搜索找不到答案,大家可以帮忙分析下断网是什么原因造成的吗? 个人感觉像是路由表出现了问题,才会出现“ the network location cannot be reached ”错误。应该是系统或网络出现了故障。但是无法确认,也无法解决...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.