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