我正在构建一个多播客户端,GCDAsyncUdpSocket
并且面临很多数据包丢失。
我已经使用 Wireshark 监控了服务器,并使用 AirCap 捕获了空中的 WiFi 数据包,我确信数据包传输正确。我还查看了库中的调试跟踪GCDAsyncUdpSocket
,我发现有时socket4FDBytesAvailable:
会用一个大参数调用它,比如 4000,但是当它读取套接字时,它读取的字节更少——可能是 500——这就是数据包丢失的地方。我增加了套接字缓冲区,但这无济于事。
最后,我注意到使用 Instruments 的时间分析器,无论巧合与否,每次我丢失数据包时都会创建一个新的 DISPATCH_WORKER_THREAD 实例。这是正常的吗?