// TODO: update the status.
}
+/**
+ * Called when the connection is finally closed. This will reopen the listening
+ * socket if the debugger remains attached.
+ */
+- (void)connectionDidClose:(NetworkConnection*)connection
+{
+ if ([delegate respondsToSelector:@selector(debuggerDisconnected)])
+ [delegate debuggerDisconnected];
+
+ if (self.attached)
+ [connection_ connect];
+}
+
- (void)handleResponse:(NSXMLDocument*)response
{
NSInteger transactionID = [connection_ transactionIDFromResponse:response];
void NetworkCallbackController::CloseConnection()
{
+ NSUInteger closeCount = 0;
+
+ if (readStream_) {
+ UnscheduleReadStream();
+ ++closeCount;
+ }
+ if (writeStream_) {
+ UnscheduleWriteStream();
+ ++closeCount;
+ }
+
if (socketHandle_) {
- close(socketHandle_);
- //socketHandle_ = NULL;
+ for ( ; closeCount > 0; --closeCount)
+ close(socketHandle_);
+
+ socketHandle_ = NULL;
+ [connection_ socketDisconnected];
}
- UnscheduleReadStream();
- UnscheduleWriteStream();
}
BOOL NetworkCallbackController::WriteStreamCanAcceptBytes()
case kCFStreamEventErrorOccurred:
ReportError(CFReadStreamCopyError(stream));
- UnscheduleReadStream();
+ CloseConnection();
break;
case kCFStreamEventEndEncountered:
- UnscheduleReadStream();
CloseConnection();
- [connection_ socketDisconnected];
break;
};
}
case kCFStreamEventErrorOccurred:
ReportError(CFWriteStreamCopyError(stream));
- UnscheduleWriteStream();
+ CloseConnection();
break;
case kCFStreamEventEndEncountered:
- UnscheduleReadStream();
- [connection_ socketDisconnected];
+ CloseConnection();
break;
}
}
CFRelease(quitSource_);
quitSource_ = NULL;
+ if ([delegate_ respondsToSelector:@selector(connectionDidClose:)])
+ [delegate_ connectionDidClose:self];
+
[pool release];
}
*/
- (void)socketDisconnected
{
- if ([delegate_ respondsToSelector:@selector(connectionDidClose:)])
- [delegate_ connectionDidClose:self];
+ [self close];
}
/**