Используя диагностику сети

Во многих основанных на сети приложениях основанные на сети ошибки могут произойти, которые не связаны с Вашим приложением. Однако большинство пользователей, вероятно, не знает, почему приложение перестало работать. CFNetDiagnostics API позволяет Вам быстрый и простой способ помочь пользователю решить их сетевые проблемы с небольшой работой над Вашим концом.

Если Ваше приложение использует объект CFStream, то создайте сетевую диагностическую ссылку (CFNetDiagnosticRef) путем вызывания функции CFNetDiagnosticCreateWithStreams. CFNetDiagnosticCreateWithStreams берет средство выделения, поток чтения и поток записи как параметры. Если Ваше приложение использует только поток чтения или поток записи, неиспользованный параметр должен быть установлен в NULL.

Если никакой поток не существует, можно также создать сетевую диагностическую ссылку прямо из URL. Чтобы сделать это, вызовите CFNetDiagnosticCreateWithURL функция и передача это средство выделения и URL как a CFURLRef. Это возвратит сетевую диагностическую ссылку для Вас для использования.

Для диагностирования проблемы через Сетевой Диагностический Ассистент вызовите CFNetDiagnosticDiagnoseProblemInteractively функционируйте и передайте сетевую диагностическую ссылку. Перечисление 6-1 показывает, как использовать CFNetDiagnostics с потоками, реализованными на цикле выполнения.

Перечисление 6-1  Используя CFNetDiagnostics API, когда происходит потоковая ошибка

    case kCFStreamEventErrorOccurred:
        CFNetDiagnosticRef diagRef =
            CFNetDiagnosticCreateWithStreams(NULL, stream, NULL);
        (void)CFNetDiagnosticDiagnoseProblemInteractively(diagRef);
        CFStreamError error = CFReadStreamGetError(stream);
        reportError(error);
        CFReadStreamClose(stream);
        CFRelease(stream);
        break;

CFNetworkDiagnostics также предоставляет Вам возможность получить состояние проблемы вместо того, чтобы использовать Сетевой Диагностический Ассистент. Это выполняется путем вызова CFNetDiagnosticCopyNetworkStatusPassively, который возвращает постоянное значение такой как kCFNetDiagnosticConnectionUp или kCFNetDiagnosticConnectionIndeterminate.