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