Я использую стороннюю библиотеку AsyncUDPSocket в своем приложении для iPhone, и по большей части она работает. отличный. У меня есть одноэлементный экземпляр AsyncUDPSocket
, который я использую для всего своего сетевого трафика. Мое приложение зарегистрировано для отслеживания местоположения в фоновом режиме и будет просыпаться и отправлять пакеты обновления местоположения по сети во время работы в фоновом режиме. Все это отлично работает в фоновом режиме, на переднем плане, телефон заблокирован или разблокирован, за исключением случаев, когда я делаю следующее:
- Запустить мое приложение
- Отключить отслеживание местоположения в настройках моего приложения (чтобы фон не просыпался)
- Нажмите кнопку «Домой» (приложение переходит в фоновый режим, розетка «замораживается» вместе с остальной частью приложения)
- Заблокировать телефон
- Разблокировать телефон
- Возобновить приложение
- Попытка перезапустить отслеживание и отправить что-то из сокета. Как только я пытаюсь, я получаю сообщение об ошибке
SIGPIPE
/EPIPE
, и приложение вылетает.
Я решил, что лучший способ справиться с этим — закрывать и освобождать сокет всякий раз, когда приложение завершает работу, а фоновое отслеживание не включено, но когда я пытаюсь выполнить [socket close]
или [socket release]
на AsyncUDPSocket
, я получаю различные EXC_BAD_ACCESS
ошибки. Я сообщил об ошибке команде разработчиков, но мне было интересно, может ли кто-нибудь здесь дать несколько идей о том, как полностью избежать ошибки SIGPIPE
или о других способах поддержания сокета в рабочем состоянии, не освобождая его. Спасибо.