2010-04-01 4 views
1

J'écris une application iPhone avec un serveur web. Pour traiter une requête web, je prends la requête web et j'écris() les données que je veux renvoyer. Lorsque j'essaie de télécharger un fichier de taille moyenne (3-6 Mo), cela fonctionne très bien, mais si j'annule le téléchargement à mi-chemin, l'application plante et ne laisse aucune trace d'erreur. Je pense que le descripteur de fichier devient invalide à mi-chemin de l'écriture, et provoque le crash. Je ne sais vraiment pas si c'est ce qui cause le crash, je suppose juste. Par exemple, je base mon serveur web sur this par exemple.write() provoque un plantage fatal lorsque filedescriptor devient invalide

NSString *header = @""; 
NSData *data = [NSData dataWithContentsOfFile:fullPath]; 
write (fd, [header UTF8String], [header length]); 
write(fd, [data bytes], [data length]); 
close(fd); 

Est-ce que quelqu'un sait comment résoudre ce problème? Je pensais à découper les données et à écrire chaque partie, mais je ne pense pas que ça aiderait.

+1

Quel code utilisez-vous pour arrêter le téléchargement? Avez-vous essayé d'exécuter l'application dans le débogueur pour attraper le crash? – codewarrior

+0

Pourquoi supposer quoi que ce soit? Vous avez des outils pour vous aider à identifier le point de collision. Vous devriez avoir un backtrace, au moins. Exécutez votre application dans le débogueur et voyez où elle se bloque. – bbum

Répondre

2

Il semble que votre application reçoive probablement le signal SIGPIPE suite à une tentative d'écriture sur un socket défectueux. Vous devrez ignorer le signal SIGPIPE dans votre code, en utilisant quelque chose comme:

#include <signal.h> 

signal (SIGPIPE, SIG_IGN); 

Je vous suggère de le faire en haut de votre fonction main().

En outre, vous pourriez être mieux d'utiliser NSInputStream/NSOutputStream ou leurs homologues de base de la Fondation, CFReadStream/CFWriteStream, car ils peuvent être faits pour utiliser la boucle d'exécution pour permettre un fonctionnement asynchrone.

Questions connexes