Если другая сторона закрывает сокет, ваш обратный вызов (который вы указали в CFSocketCreate) будет вызван с типом обратного вызова kCFSocketDataCallBack, но данные будут пустыми. Тест на это так:
void SocketCallback (CFSocketRef s, CFSocketCallBackType callbackType,
CFDataRef address, const void *data, void *info)
{
if (callbackType == kCFSocketDataCallBack) {
NSData *nsData = (NSData *)data;
if (nsData.length == 0) {
NSLog(@"got kCFSocketDataCallBack, but with 0 bytes -- connection terminated");
// do whatever you want to do here when connection is dropped
}
} else {
NSLog(@"SocketCallback type %d", callbackType);
}
}
Вы можете установить флаг там и использовать это, чтобы знать, что ваше соединение обрывается, а затем, когда вы идете писать упавшего соединение, попытка восстановить или уведомить пользователя или что бы вы ни делали.