gpt4 book ai didi

c++ - 为什么 connect() 会给出 EADDRNOTAVAIL?

转载 作者:IT老高 更新时间:2023-10-28 21:41:13 25 4
gpt4 key购买 nike

我在我的应用程序中出现了似乎无法重现的故障。我有一个失败的 TCP 套接字连接,应用程序试图重新连接它。在尝试重新连接的第二次 connect() 调用中,我得到一个错误结果,错误结果为 errno == EADDRNOTAVAIL,connect() 的手册页表示:“本地计算机无法使用指定的地址。”

查看对connect()的调用,第二个参数似乎是错误所指的地址,但据我了解,这个参数是远程主机的TCP套接字地址,所以我很困惑关于引用本地机器的手册页。是不是我的本地机器上没有远程 TCP 套接字主机的这个地址?如果是这样,为什么会这样?它必须在连接失败之前第一次成功调用 connect() 并尝试重新连接并收到此错误。两次 connect() 的参数都是相同的。

这个错误会不会是一个暂时的错误,如果我再次尝试调用 connect 可能会在我等待足够长的时间后消失?如果不是,我应该如何尝试从这个失败中恢复?

最佳答案

查看此链接

http://www.toptip.ca/2010/02/linux-eaddrnotavail-address-not.html

编辑:是的,我本来想添加更多,但由于紧急情况不得不删掉它

您是否在尝试重新连接之前关闭了套接字?关闭将告诉系统套接字对(ip/port)现在是空闲的。

这里还有一些额外的项目:

  • 如果本地端口已经连接到给定的远程 IP 和端口(即,已经有一个相同的套接字对),您将收到此错误(请参阅下面的错误链接)。
  • 绑定(bind)非本地套接字地址会产生此错误。如果一台机器的 IP 地址是 127.0.0.1 和 1.2.3.4,并且您尝试绑定(bind)到 1.2.3.5,您将收到此错误。
  • EADDRNOTAVAIL:指定的地址在远程机器上不可用或名称结构的地址字段全为零。

链接到与你类似的错误(答案接近底部)

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4294599

您的套接字似乎基本上停留在 TCP 内部状态之一,添加重新连接延迟可能会解决您的问题,正如他们在该错误报告中所做的那样。

关于c++ - 为什么 connect() 会给出 EADDRNOTAVAIL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com