Приложение iOS не может восстановить соединение через сокет во время выполнения, если соединение WLAN отключено - PullRequest
0 голосов
/ 26 сентября 2018

Бывший коллега оставил мне проект iOS, который я должен сейчас поддерживать.У приложения есть задача постоянно получать данные через сокетное соединение, что прекрасно работает.Однако клиент жалуется, что приложение в какой-то момент перестанет доставлять данные.Я подозреваю, что это происходит, если устройство теряет соединение WLAN в течение короткого времени.На самом деле, приложение должно установить новое соединение, которое, к сожалению, не работает.Код для установления соединения выглядит следующим образом:

- (void)initSocketConnection
{
    CFReadStreamRef readStreamRef = nil;
    CFWriteStreamRef writeStreamRef = nil;

    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)CFBridgingRetain(config.host), config.port, &readStreamRef, &writeStreamRef);

    if(CFWriteStreamOpen(writeStreamRef) == true)
    {
        if(CFReadStreamOpen(readStreamRef) == true)
       {
…

Я имитирую поведение, отключая WLAN на устройстве и ожидая, пока приложение больше не получит никаких данных.Затем я снова активирую WLAN.В случае ошибки метод initSocketConnection будет вызываться снова и снова.Тем не менее, я получаю код BAD_ACCESS 2 при вызове if (CFWriteStreamOpen (writeStreamRef) == true).Даже если я попробую несколько минут, ошибка не изменится.Если я перезапущу приложение, оно сразу же снова получит данные.

В чем может быть проблема?Кажется, приложение не может установить новое соединение.Или мой способ симулировать проблему неверен?

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