2010-10-21 8 views
6

Mi aplicación de iPhone está usando AsyncUdpSocket para manejar un socket UDP. Sin embargo, cuando mi solicitud pasa a un segundo plano en IOS 4.0 y devuelve al primer plano, estoy consiguiendo el error siguiente:¿Cómo puedo ejecutar sockets UDP en segundo plano en una aplicación de iPhone?

Application 'MyAppName' exited abnormally with signal 13: Broken pipe

Esto se debe a mis tomas se desconectan cuando mi solicitud pasa a un segundo plano.

¿Cómo puedo evitar esto y ejecutar sockets UDP en segundo plano?

+0

¿Su aplicación está registrada como una aplicación de audio VOIP o de transmisión? Esos podrían ser los únicos tipos que mantienen vivo un zócalo en el fondo. – hotpaw2

+0

Sí, mi info.plist tiene estas propiedades "La aplicación reproduce audio, la aplicación proporciona servicios de Voz sobre IP, registros de aplicación para actualizaciones de ubicación" ... –

+0

El problema es cuando la aplicación es en segundo plano y el teléfono está en estado bloqueado ... –

Respuesta

2

Esto no está relacionado con UDP. EPIPE solo ocurre para los descriptores de archivos "stream" - Unix pipes y sockets TCP.

Supongo que tiene algún tipo de conexión TCP de control que se agota en el extremo remoto cuando entra en segundo plano. Debe averiguar cómo mantenerlo vivo o volver a conectarse cuando la aplicación se active.

También puede manejar (o ignorar) EPIPE, ver sigaction(2), y reaccionar a ella en consecuencia en el retorno de write(2).

+0

El siguiente código me resolvió el problema \t \t int noSigPipe = 1; \t \t si (theSocket4) \t \t { \t \t \t setsockopt (CFSocketGetNative (theSocket4), SOL_SOCKET, SO_NOSIGPIPE, y noSigPipe, sizeof (noSigPipe)); \t \t} – Ravi

Cuestiones relacionadas