2010-10-21 11 views
6

L'applicazione iPhone utilizza AsyncUdpSocket per gestire un socket UDP. Tuttavia, quando la mia applicazione passa in secondo piano in iOS 4.0 e ritorna in primo piano, sto ottenendo il seguente errore:Come posso eseguire i socket UDP in background in un'applicazione iPhone?

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

Questo è perché i miei prese sono scollegati quando la mia applicazione va in secondo piano.

Come evitare questo ed eseguire socket UDP in background?

+0

La tua app è registrata come app VOIP o streaming audio? Quelli potrebbero essere gli unici tipi che mantengono vivo un socket in background. – hotpaw2

+0

Sì. Il mio info.plist ha queste proprietà "L'app riproduce audio, l'app fornisce servizi Voice over IP, i registri delle app per gli aggiornamenti di posizione" ... –

+0

Il problema si verifica quando l'applicazione è in background e il telefono è bloccato. –

risposta

2

Questo non è correlato a UDP. EPIPE si verifica solo per i descrittori di file "stream" - pipe Unix e socket TCP.

Suppongo che tu abbia una sorta di connessione TCP di controllo che va in time out sul remoto quando vai in background. Hai bisogno di capire come tenerlo in vita o riconnettersi quando l'app si sveglia.

È inoltre possibile gestire (o ignorare) EPIPE, vedere sigaction(2) e reagire di conseguenza al ritorno da write(2).

+0

Il seguente codice risolve il problema per me \t \t int noSigPipe = 1; \t \t se (theSocket4) \t \t { \t \t \t setsockopt (CFSocketGetNative (theSocket4), SOL_SOCKET, SO_NOSIGPIPE, e noSigPipe, sizeof (noSigPipe)); \t \t} – Ravi

Problemi correlati