【问题标题】:socket sendto get the error 22 during udp packetssocket sendto 在 udp 数据包期间收到错误 22
【发布时间】:2013-12-10 18:11:15
【问题描述】:

我编写了一个客户端应用程序,它使用 mdnsreponder 进行一些服务发现。我有一个要求,我的客户端 IP 会经常更改。每当 IP 发生变化时,我都需要再次进行发现。 所以我编写了一个简单的测试应用程序,它将每 1 分钟更改一次 IP 并进行发现。

一切正常,但经过几次 IP 更改(大约 7-10 次更改)后,它给出了以下套接字错误。

(下面是mdnsresponder代码中sendtosocket函数的错误码)

mdnsplatformsend udp got error 22 .

之后我的请求不会放到新IP的接口上。​​

再次,我必须重新启动我的应用程序,然后它才能工作......

谁能帮忙解决这个问题,为什么试了几次就停止了?

【问题讨论】:

  • errno==22 是 EINVAL(无效参数)。您将不正确的参数传递给 sendto 函数。您没有显示您的套接字是否绑定到 INADDR_ANY(0) 或特定适配器 - 因为这可能会受到威胁。请向我们展示您的代码。
  • 由于您没有向我们展示您如何调用`sendto()`,包括传递参数的定义和初始化,我们只能猜测。我的第一个猜测是你传递了一个无效的套接字描述符。

标签: c sockets bonjour mdns


【解决方案1】:

请重新检查您传递的sendto函数的参数。当套接字绑定丢失时,可能会发生此错误。这意味着绑定套接字的地址已更改或无效。该错误也可能是由于您传递的地址结构的大小错误造成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多