Hi,
I'm having trouble with a CFReadStream operation that seems to block for an extrodinarily long time after the last read. I can't seem to see anything wrong with my logic. I connect my readstream to a socket using the CFStreamCreatePairWithSocketToCFHost function. I'm sending a standard HTTP GET request over port 80 using a write stream and then attempting to load the ReadStream into a CFMTTHMessageRef object. I do this all from within a unit test which green-bars but takes for ever. I'm certain it has nothing to do with the server as I can get rapid responses using NSURLRequest using the same request. Here's my loop that hangs:
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);
It is at the last read which returns zero indicating EOF that hangs for about 1-3 minutes. Where am I going wrong?