Comment puis-je attraper sigpipe dans iphone/objectif-c?Comment attraper sigpipe dans l'application iphone?
grâce
Comment puis-je attraper sigpipe dans iphone/objectif-c?Comment attraper sigpipe dans l'application iphone?
grâce
Utiliser bon vieux code POSIX:
#include <signal.h>
void SigPipeHandler(int s);
void SigPipeHandler(int s)
{
// do your handling
}
Init dans un endroit (main.m?) Avec
signal(SIGPIPE, SigPipeHandler);
Essayez de régler SO_NOSIGPIPE comme indiqué ici: How to prevent SIGPIPEs (or handle them properly)
La première réponse ne fonctionne pas. Aussi je suis en train d'utiliser la solution décrite en référence de deuxième message:
int main(int argc, char *argv[ ]) {
struct sigaction mySigAction;
mySigAction.sa_handler = SIG_IGN;
sigemptyset(&mySigAction.sa_mask);
sigaction(SIGPIPE, &mySigAction, NULL);
...
}
mais ce code ne fonctionne pas trop. Quelqu'un sait-il la solution de ce problème?
La première réponse fonctionne bien. mais vous devez tout mettre dans le fichier main.mm
.
Et dans static class(Singleton)
, cela fonctionne également.
#import <UIKit/UIKit.h>
#import <sys/signal.h>
#if TARGET_IPHONE_SIMULATOR
#endif
void SigPipeHandler(int s)
{
NSLog(@"We Got a Pipe Single :%d____________",s);
}
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
signal(SIGPIPE, SigPipeHandler);
int retVal = UIApplicationMain(argc, argv, nil, @"FullAppDelegate");
[pool release];
return retVal;
}
Un fait important pour tester la SigPipeHandler:
Pour moi, il ne fonctionne pas lorsque le débogueur a été atached. Ainsi, lorsque vous exécutez une application directement à partir de XCode, le gestionnaire n'est pas appelé. Pendant ce temps, sur un périphérique sans le débogueur attaché, le gestionnaire fonctionne comme prévu.
merci beaucoup d'avoir posté cette réponse! J'ai observé ce même comportement de signaux qui ne sont pas traités correctement lors du débogage mais qui sont bien gérés quand on ne débogue pas ... Bizarre! Quoi qu'il en soit, cela m'a finalement permis de réaliser que mon application traitait SIGPIPE mais mon vrai problème était qu'après avoir été traité, une exception std: était levée mais pas capturée plus tard dans mon code c objectif qui utilisait '@ try'' catch ' et pas les blocs C 'try'' catch'. – Sam
Mon gestionnaire de sigpipe ne semblait pas non plus être appelé par le simulateur iOS. Peut-être que c'était juste que j'étais attaché et débogage dans xCode, mais je pensais que ça pourrait être le simulateur. –
Cela ne fonctionne pas ou je ne l'utilise pas correctement. Mon deuxième thread fait cette erreur. – Shay
Etes-vous sûr que vous installez le gestionnaire suffisamment tôt? – Farcaller