在这个问题上有点困惑:-)。我在 Ubuntu 10.04 上运行了一些代码,它使用 recvmsg 调用来接收音频 UDP 数据包。这件作品是一个更大的 SIP 客户端的一部分,我一直在通过网络使用远程系统对其进行测试。
通常,我可以毫无问题地建立呼叫,并且音频可以愉快地从远程源传输到我的程序。但是,经过随机时间后,我在端口上遇到了读取错误。发生这种情况时,我会得到 errno EHOSTUNREACH。在这个错误上,我关闭了我的端口并终止了连接。
奇怪的是,我的印象是这会在响应 ICMP 消息时发生。也许是由于暂时的网络故障。然而,在重现此问题并进行完整的数据包捕获后,我看到的都是 ICMP ping 和响应的位置。我没有看到内核解释为 EHOSTUNREACH 的任何 ICMP 错误消息。
我的 UDP 端口非常基本。如果真的需要,我可以发布代码。但这只是一个基本的 SOCK_DGRAM。套接字在遇到此错误条件之前,有时能够接收超过 8 小时的数据。
任何想法我可以如何进一步解决这个问题。我试图理解为什么我收到这个 errno 而没有 ICMP 消息与之关联。