我正在调试接收RTP的C ++程序的数据包丢失问题。 我的程序运行了很长时间后收到大量的RTP数据,它开始丢失数据包。
使用Wireshark进行跟踪会显示丢失的数据包,但我的应用程序从未接收过它们。在将它们交付给应用程序之前,网络堆栈似乎丢弃了它们。重新启动我的应用程序后,所有内容都恢复正常。
为了产生错误条件,我使用RTP使机器过载,此时发生丢包并且有充分的理由。但即使我停止过载并开始以适中的速率发送,仍然会发生数据包丢失,我必须重新启动应用程序才能再次接收所有数据。
这是Linux接收缓冲区处理的问题吗?我可以检查哪些Linux统计信息以查看丢失的数据包的位置?
答案 0 :(得分:3)
您没有足够快地消耗UDP输入。以下是为缓解这一点而采取的一些常规步骤:
recvmmsg(2)
以减少系统调用开销,setsockopt(2)
),