Если другая сторона закрывает сокет, ваш обратный вызов (который вы указали в 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);
}
}
Вы можете установить там флаг и использовать его, чтобы знать, что ваше соединение разорвано, а затем, когда вы собираетесь записать в разорванное соединение, попытаться переподключиться или уведомить пользователя или все, что вы хотите сделать.