我的申请中出现了似乎无法再现的故障。我有一个TCP套接字连接失败,该应用程序尝试重新连接它。在第二次尝试重新连接的connect()调用中,我得到了一个错误结果,错误代码为errno == EADDRNOTAVAIL,connect()的手册页说:“指定的地址在本地计算机上不可用。”
查看对connect()的调用,第二个参数似乎是错误所指向的地址,但是据我了解,该参数是远程主机的TCP套接字地址,因此我对该人感到困惑页面引用本地计算机。本地计算机上没有可用的远程TCP套接字主机地址吗?如果是这样,为什么会这样呢?它必须在连接失败之前第一次成功调用connect(),然后尝试重新连接并收到此错误。两次的connect()参数相同。
如果我等待了足够长的时间,如果我再次尝试调用connect,此错误是否会是暂时的错误?如果不是,我应如何尝试从此故障中恢复?
检查此链接
http://www.toptip.ca/2010/02/linux-eaddrnotavail-address- not.html
编辑 :是的,我原本打算添加更多内容,但由于紧急情况不得不在此删减
您是否在尝试重新连接之前关闭了插座?关闭将告诉系统套接字对(ip /端口)现在是空闲的。
这里还有一些其他项目:
链接与您类似的错误(答案接近底部)
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4294599
看来您的套接字基本上卡在了TCP内部状态之一中,并且增加了重新连接的延迟可能会解决您的问题,因为它们似乎已在该错误报告中完成。