Ошибка SIGPIPE в iOS4, когда приложение работает в фоновом режиме и на экране блокировки

Я использую сокет 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), кто-нибудь может мне помочь или дать мне несколько предложений? и извините за мой ломаный английский^.^, большое спасибо.


person Joe Qian    schedule 03.11.2010    source источник


Ответы (1)


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

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

person Joe Qian    schedule 09.09.2011