Je rencontre des problèmes avec une opération CFReadStream qui semble bloquer pendant une durée extrêmement longue après la dernière lecture. Je ne peux pas sembler voir quelque chose de mal avec ma logique. Je connecte mon readstream à un socket en utilisant la fonction CFStreamCreatePairWithSocketToCFHost. J'envoie une requête HTTP GET standard sur le port 80 en utilisant un flux d'écriture, puis j'essaie de charger le ReadStream dans un objet CFMTTHMessageRef. Je fais tout cela à partir d'un test unitaire que les barres vertes prennent mais pour toujours. Je suis certain que cela n'a rien à voir avec le serveur car je peux obtenir des réponses rapides en utilisant NSURLRequest en utilisant la même requête. Voici ma boucle qui pend:Blocs CFReadStreamRead lors de la dernière lecture
CFDataRef responseBody = CFDataCreateMutable(kCFAllocatorDefault, 0);
CFHTTPMessageRef myMessage = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, FALSE);
CFIndex blockReadSize = 1024;
UInt8 readBuffer[blockReadSize];
NSLog(@"About to read stream...");
CFIndex totoalRead = 0;
for(CFIndex bytesRead = CFReadStreamRead(readStream, readBuffer, blockReadSize); bytesRead > 0; bytesRead = CFReadStreamRead(readStream, readBuffer, blockReadSize)) {
totoalRead += bytesRead;
NSLog(@"Reading stream... %i bytes read.", bytesRead);
if (!CFHTTPMessageAppendBytes(myMessage, readBuffer, bytesRead)) {
//Parse error
NSLog(@"HTTP Read/Parse error!");
}else{
if (CFHTTPMessageIsHeaderComplete(myMessage)) {
// Perform processing.
NSLog(@"Header Complete");
}else NSLog(@"Reading header");
}
}
NSLog(@"Total bytes read %i", totoalRead);
responseBody = CFHTTPMessageCopyBody(myMessage);
Il est à la dernière lecture qui renvoie zéro indiquant EOF qui se bloque pendant environ 1-3 minutes. Où vais-je mal?