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