2

スレッド (bsd ソケット API を使用) で UDP 送信操作 (サーバーへの要求の送信) を実行する iOS アプリを作成し、別のスレッドが同じソケットで 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);

助けてくれてありがとう。

4

1 に答える 1

0

バグが見つかりました!CellularからUDPパケットを受信しませんでしたが、TCPは通過可能であるため、recvfromは無限にブロックされます。

于 2012-11-21T11:58:06.600 に答える