【发布时间】: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()`,包括传递参数的定义和初始化,我们只能猜测。我的第一个猜测是你传递了一个无效的套接字描述符。