Frage

Ich verwende BSD Socket in meiner App zu senden und Empfangen von Daten auf iphone4 (iOS4.1), gibt es drei Situationen in meiner App:

  1. App ist in den Vordergrund und Bildschirmsperre, es ist in Ordnung ausgeführt wird.
  2. App im Hintergrund und Bildschirm does't Sperre ausgeführt wird, auch es ist in Ordnung (ich benutze NSStream zum Senden und Empfangen von Daten für halten app lebendig im Hintergrund, es funktioniert gut.)
  3. App im Hintergrund und Bildschirmsperre ausgeführt wird, App fein läuft, aber immer die SIGPIPE Fehlermeldung erhalten, wenn app versucht Aufruf sendto () oder send () über UDP oder TCP-Socket.

ich viel suchen, aber hier nichts brauchbar, von erhalten ich weiß, was SIGPIPE ist, und i Verwendung setsockopt (Socke, SOL_SOCKET, SO_NOSIGPIPE, (void *) & auf, sizeof (int)) zu vermeiden App Ausfahrt abnorm. aber ich weiß noch nicht, warum dieser Fehler trat nur in Situation 3 und wie die Daten senden normalerweise durch bsd-Buchse in dieser Situation.


Ich habe Versuch zu erneuern und Reconnect aber es does't Arbeit, ist es noch SIGPIPE Fehler.   Ich denke, es ist vielleicht, dass alle BSD-Sockets nicht den internen Zugriff in Situation 3 erhalten können (Soweit wir, dass BSD-Socket nicht wissen können, activate WiFi oder EDGE-Verbindung in iOS), Wer kann mir helfen, oder geben Sie mir einige Anregungen? und sorry für mein gebrochenes Englisch ^. ^, Danke schön.

War es hilfreich?

Lösung

ich auf Google-Suche und fand meine eigene Frage 10 Monate vor, das ist interessant. Ich hatte bereits eine Lösung für die Anwendung Frieds im Hintergrund ausgeführt wird, und setsockopt (Socke, SOL_SOCKET, SO_NOSIGPIPE, (void *) & auf, sizeof (int)) ist nützlich, die SIGPIPE 13 Fehler ignoriert.

Dieser Fehler tritt auf, wenn der Socket bereits physische Verbindung verloren und versucht immer noch zu Schreibdaten über Wifi, 3G oder Zubehör.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top