データを連続して送受信しているアプリケーションを作成中です。私の最初の送信/受信は正常に実行されていますが、recvfromのサイズが512バイトのデータが必要な場合、戻り値は-1です。これは、「Resource temporarily unavailable」です。 errnoはEAGAINに設定されています。ブロッキング呼び出しを使用すると、タイムアウトなしでアプリケーションはrecvfromでハングします。 iPhoneでrecvfromに最大限の制限はありますか?以下は、サーバーからデータを受信する機能です。私は何がうまくいかないのか理解できません。iPhone UDP recvfromを使用してデータを受信できません
{ struct timeval tv;
tv.tv_sec = 3;
tv.tv_usec = 100000;
setsockopt (mSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv);
NSLog(@"Receiving.. sock:%d",mSock);
recvBuff = (unsigned char *)malloc(1024);
if(recvBuff == NULL)
NSLog(@"Cannot allocate memory to recvBuff");
fromlen = sizeof(struct sockaddr_in);
n = recvfrom(mSock,recvBuff,1024,0,(struct sockaddr *)&from, &fromlen);
if (n == -1) {
[self error:@"Recv From"];
return;
}
else
{
NSLog(@"Recv Addr: %s Recv Port: %d",inet_ntoa(from.sin_addr), ntohs(from.sin_port));
strIPAddr = [[NSString alloc] initWithFormat:@"%s",inet_ntoa(from.sin_addr)];
portNumber = ntohs(from.sin_port);
lIPAddr = [KDefine StrIpToLong:strIPAddr];
write(1,recvBuff,n);
bcopy(recvBuff, data, n);
actualRecvBytes = n;
free(recvBuff);
}
}
作成するIOスレッドの数に最大限の制限があるのか、ネットワークインターフェイスがいっぱいであるのかを知りたいですか? – Neo
貼り付けた内容を読む:「ソケットにメッセージがない場合は、[問題が発生しています。]」 recvfromはあなたが何も受け取ることができないので、-1を返しています。 –