Я пишу приложение, которое непрерывно отправляет и принимает данные. Моя начальная отправка/получение выполняется успешно, но когда я ожидаю данные размером 512 байт в recvfrom, я получаю его возвращаемое значение как -1, которое «Ресурс временно недоступен». а errno - EAGAIN. Если я использую блокирующий вызов, то есть без тайм-аута, приложение просто зависает в recvfrom. Есть ли максимальный предел для recvfrom на iPhone? Ниже приведена функция, которая получает данные с сервера. Я не могу понять, что может быть не так.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);
}
}
Я хочу знать, существует ли какой-либо максимальный предел для количества создаваемых потоков ввода-вывода или могут быть сетевые интерфейсы заполнены? – Neo
Прочтите, что я вставил: «Если в сокете нет сообщений, [проблема возникает]». recvfrom блокирует/возвращает -1, потому что вам нечего получать. –