【问题标题】:Error could not bind the socket: Cannot assign requested address错误无法绑定套接字:无法分配请求的地址
【发布时间】:2021-07-05 14:00:32
【问题描述】:

我正在开发一个使用数据报套接字进行通信的应用程序。我遇到了一个奇怪的问题,即应用程序的第一次运行总是在与Cannot assign requested address 绑定的第一个套接字上失败,但第二次运行应用程序时一切正常。

我已经检查了bind() 的参数是否正确。在我设置套接字之前,我正在使用ioctl() 调用配置接口的 IP 地址并将其设置并运行。

我想详细了解他无法绑定套接字的原因。是否有一些我可以检查的日志文件或其他东西?感谢您的建议!

【问题讨论】:

  • 也许套接字已经在使用中,需要由操作系统释放才能在新的bind() 中使用?类似的事情发生在我身上,但只是在我的程序崩溃并且没有自行清理资源之后。你也可以发一个minimal reproducible example吗?
  • @rdxdk 非常感谢您的建议。我认为它与已在使用的套接字无关。即使在重新启动树莓派后也会出现问题。我认为它必须与bind() 发生时未 100% 配置接口有关。可能ioctl() 电话需要一些时间。

标签: c sockets udp bind raspbian


【解决方案1】:

当我在ioctl() 设置过程之后添加睡眠时,不会发生错误。 ioctl() 调用似乎需要一些时间才能完成,因此绑定错误,因为接口尚未 100% 配置该 IP 地址。

【讨论】:

  • 你能发布代码吗?你为什么首先使用ioctl()?您是否检查过它的返回值或errno 是否有错误?您确定您传递的参数已正确初始化吗?看看manual page,以防你忘记了什么。
  • 我打开了一个新的question,因为在这种情况下bind() 调用不是问题。我正在使用ioctl(),因为我需要在执行时配置接口的 IP 设置。我发布了我在新问题上编写的代码。
猜你喜欢
  • 2020-08-05
  • 1970-01-01
  • 2020-08-24
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2012-12-25
  • 2017-04-13
相关资源
最近更新 更多