Ich schreibe eine Anwendung, die kontinuierlich Daten sendet und empfängt. Mein anfänglicher Sende-/Empfangsvorgang wird erfolgreich ausgeführt, aber wenn ich Daten mit der Größe 512 Bytes im recvfrom erwarte, bekomme ich den Rückgabewert als -1, was "Ressource vorübergehend nicht verfügbar" ist. und errno wird auf EAGAIN gesetzt. Wenn ich einen blockierenden Anruf verwende, d. H. Ohne Timeout, hängt die Anwendung einfach in recvfrom. Gibt es eine maximale Beschränkung für recvfrom auf dem iPhone? Unten ist die Funktion, die Daten vom Server empfängt. Ich kann nicht herausfinden, was schief gehen kann.iPhone Kann keine Daten empfangen mit 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);
}
}
Ich möchte wissen, ob gibt es eine maximale Grenze für die Anzahl der IO-Threads erstellt werden oder möglicherweise die Netzwerkschnittstellen sind voll? – Neo
Lesen Sie, was ich eingefügt habe: "Wenn keine Nachrichten am Socket verfügbar sind, [Problem Sie]]. recvfrom blockiert/gibt -1 zurück, weil Sie nichts erhalten können. –