【发布时间】:2018-05-17 14:56:11
【问题描述】:
我有一个相对简单的服务器对多客户端设置。服务器使用多播发送数据报,(可能有很多)客户端接收它们。
Linux (RHEL) 客户端正在接收/读取这些数据报的大约 3-4 Mbps 流,使用:
QByteArray datagram;
while (udpSocketReceiver->hasPendingDatagrams())
{
datagram.resize(udpSocketReceiver->pendingDatagramSize());
udpSocketReceiver->readDatagram(datagram.data(), datagram.size());
}
这似乎在 99.99% 的情况下都有效。但是,我偶尔会看到丢失了数据报(正如我正在使用的内部计数器/模式所观察到的那样)。我的第一个想法是“嗯,它是 UDP - 它一定只是在传输过程中被丢弃了。”
但是,我也在使用 tcpdump 监控客户端/接收方……而且我也看到了那里存在的“丢失”数据报,这些数据报被应用程序遗漏了。网络接口似乎可以很好地接收丢失的数据报,但我偶尔会将它们丢弃到应用程序层。几乎是我希望放弃它们的最后一个地方。
我一直在尝试调整 Linux 中的适用缓冲区(net.core.rmem_max、net.core.rmem_default),但没有任何运气。
感谢您的帮助。
【问题讨论】:
-
您可能在 Qt 中发现了一个错误。尝试在bugreports.qt.io 提交错误报告
标签: linux qt networking udp