我们创建了一个iOS应用,该应用在一个线程(我们使用bsd套接字API)中执行UDP发送操作(向服务器发送请求),另一个线程在同一套接字上执行UDP接收操作(从服务器接收响应)。
它可以在iOS 4/5上正常运行,但是当我们在iOS 6.0.1(iPhone)上对其进行测试时,它不起作用,在装有iOS 6.0.1和模拟器的iPad上也没有发现问题。
该应用程序无限地阻止了recvfrom
,我们确定服务器发出了UDP响应。
似乎这是相同的问题:https://groups.google.com/forum/#!msg/cocoaasyncsocket/rWokj2VO3VE/f-mZ6xWEUhkJ。
程式码片段:
char recvData[UDP_PACKAGE_LENGTH];
bzero(recvData, UDP_PACKAGE_LENGTH);
struct sockaddr_in fromAddr;
uint32_t len = sizeof(fromAddr);
int isHead = recvfrom(self->serverSock, recvData, UDP_PACKAGE_LENGTH, 0, (struct sockaddr*)(&fromAddr), &len);
谢谢你的帮助。
最佳答案
发现错误!我们没有从Cellular接收UDP数据包,但是TCP是可传递的,因此recvfrom无限地阻塞。
关于sockets - ios6.0.1 recvfrom始终在iPhone上阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13475285/