Ошибка SIGPIPE в iOS4, когда приложение работает в фоновом режиме и на экране блокировки - PullRequest
1 голос
/ 03 ноября 2010

Я использую разъем BSD в своем приложении для отправки и получения данных на iphone4 (iOS4.1), в моем приложении есть три ситуации:

  1. приложение работает на переднем плане и блокирует экран, все нормально.
  2. приложение работает в фоновом режиме и экран не блокируется, это тоже нормально (я использую NSStream для отправки и получения данных, чтобы приложение оставалось в живых в фоновом режиме, оно отлично работает).
  3. приложение работает в фоновом режиме и блокирует экран, приложение работает нормально, но всегда получает ошибку SIGPIPE, когда приложение пытается вызвать sendto () или send () через сокет UDP или TCP.

Я много ищу, но ничего полезного не получаю, здесь Я знаю, что такое SIGPIPE, и я использую setsockopt (sock, SOL_SOCKET, SO_NOSIGPIPE, (void *) & on, sizeof (int)), чтобы избежать приложение закрывается ненормально. но я до сих пор не знаю, почему эта ошибка произошла только в ситуации 3 и как нормально отправлять данные через сокет bsd в этой ситуации.


Я пытаюсь обновить и восстановить соединение, но оно не работает, оно все еще получает ошибку SIGPIPE. Я думаю, возможно, что все сокеты BSD не могут получить внутренний доступ в ситуации 3 (насколько мы знаем, что сокет BSD не может активировать Wi-Fi или EDGE-соединение в iOS), Кто-нибудь может мне помочь или дать мне несколько советов? и извините за мой сломанный английский ^. ^, Большое спасибо.

1 Ответ

7 голосов
/ 09 сентября 2011

Я ищу в Google и нашел свой вопрос за 10 месяцев до этого, это интересно. У меня уже было решение для приложения, работающего в фоновом режиме, и полезно использовать setsockopt (sock, SOL_SOCKET, SO_NOSIGPIPE, (void *) & on, sizeof (int)), который игнорирует ошибку Sigpipe 13.

эта ошибка возникает, когда сокет уже потерял физическое соединение и все еще пытается записать данные через Wi-Fi, 3G или Accessory.

...