Я использую сокет BSD в своем приложении для отправки и получения данных на iphone4 (iOS4.1), в моем приложении есть три ситуации:
- приложение работает на переднем плане и экран блокируется, все в порядке.
- приложение работает в фоновом режиме, и экран не блокируется, это тоже нормально (я использую NSStream для отправки и получения данных, чтобы поддерживать работу приложения в фоновом режиме, все работает нормально).
- приложение работает в фоновом режиме и экран блокируется, приложение работает нормально, но всегда получает ошибку 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), кто-нибудь может мне помочь или дать мне несколько предложений? и извините за мой ломаный английский^.^, большое спасибо.