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