この問題について少し混乱しています:-)。Ubuntu 10.04 でいくつかのコードを実行していますが、これは recvmsg 呼び出しを使用してオーディオ UDP パケットを受信しています。この部分は、私がネット上のリモート システムでテストしてきた、より大きな SIP クライアントの一部です。
通常、私は問題なく通話を確立でき、オーディオはリモートソースからプログラムに問題なく送信されます. ただし、ランダムな時間が経過すると、ポートで読み取りエラーが発生します。これが発生すると、errno EHOSTUNREACH が表示されます。このエラーで、ポートをシャットダウンして接続を切断しました。
これの奇妙な点は、これが ICMP メッセージに応答して発生するという印象を受けていたことです。一時的なネットワーク障害が原因である可能性があります。ただし、この問題を再現して完全なパケット キャプチャを実行した後、ICMP の ping と応答がどこにあるかをすべて確認できました。カーネルが EHOSTUNREACH として解釈する ICMP エラー メッセージは見当たりませんでした。
私のUDPポートはかなり基本的です。本当に必要な場合は、コードを投稿できます。しかし、これは単なる基本的な SOCK_DGRAM です。ソケットは、このエラー状態になる前に 8 時間以上データを受信できる場合があります。
この問題にさらに取り組む方法についてのアイデア。関連付ける ICMP メッセージがないのにこの errno を受信する理由を理解しようとしています。