2009-05-21 2 views
4

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

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

ответ

3

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

} 

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

Смежные вопросы