Как определить неверный CFSocket - PullRequest
4 голосов
/ 21 мая 2009

Как можно избежать отправки данных через CFSocketSendData в неверный сокет? Я пытаюсь определить состояние сокета с CFSockerIsValid, но этот метод возвращает все еще true, когда другая сторона закрыта.

Как я могу определить, действителен ли сокет? Чтобы избежать ошибок.

1 Ответ

3 голосов
/ 13 мая 2010

Если другая сторона закрывает сокет, ваш обратный вызов (который вы указали в 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);
    }

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...