Tubo roto de AsyncudPsocket después de bloquear el teléfono con la aplicación suspendida en segundo plano

StackOverflow https://stackoverflow.com/questions/6377950

Pregunta

Estoy usando el Asyncudpsocket Biblioteca de terceros en mi aplicación para iPhone y en su mayor parte funciona muy bien. Tengo una instancia singleton de un AsyncUDPSocket que uso para todo mi tráfico de red. Mi aplicación está registrada para el seguimiento de la ubicación en segundo plano y se despertará y enviará paquetes de actualización de ubicación a través de la red mientras se ejecuta en segundo plano. Todo esto funciona de moda en segundo plano, en primer plano, teléfono bloqueado o desbloqueado, excepto cuando hago lo siguiente:

  1. Empiece mi aplicación
  2. Desactivar el seguimiento de la ubicación en la configuración de mi aplicación (para que no se despierte de fondo)
  3. Presione el botón de inicio (la aplicación entra en el fondo, el socket está "liofilizado" con el resto de la aplicación)
  4. Bloquear teléfono
  5. Desbloquear el teléfono
  6. Aplicación de reanudación
  7. Intente reiniciar el seguimiento y enviar algo del enchufe. Tan pronto como lo intento, obtengo un SIGPIPE/EPIPE Error y la aplicación se bloquea.

Pensé que la mejor manera de lidiar con esto sería cerrar y liberar el enchufe siempre que la aplicación salga y el seguimiento de fondo no esté habilitado, pero cuando lo intento [socket close] o [socket release] sobre el AsyncUDPSocket, Obtengo varios EXC_BAD_ACCESS errores. Presenté un error con el equipo de desarrollo, pero me preguntaba si alguien aquí podría dar algunas ideas sobre cómo evitar el SIGPIPE Error por completo u otras formas de mantener viva el enchufe sin liberarlo. Gracias.

¿Fue útil?

Solución 2

En caso de que alguien sea curioso (que, a juzgar por las estadísticas de esta pregunta, no lo son), no pude determinar qué estaba causando el SIGPIPE error, pero finalmente resolvió mis problemas de gestión de memoria (que se debieron a una implementación defectuosa de onUdpSocketDidClose en mi delegado) para que pueda reinicializar el zócalo cada vez que la aplicación se reinicia.

Otros consejos

Gran observación: sí, parece que después de enviar la tarea al fondo y luego bloquear el teléfono, los enchufes se dejan caer y la próxima vez que intente usarla, uno se golpea con una siglo.

Ideas sobre cómo lidiar con eso aquí:Sigpipe bloquea al cambiar la tarea de fondo(Está configurado para ignorar para Sigpipe para toda la aplicación, o para el socket, o proporcionarle a Hanler)

PD. Además, parece que la configuración para ignorar a Sigpipe no funciona con el depurador adjunto, así que compare con y sin.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top