How can i catch sigpipe in iphone/objective-c?
thanks
One important fact for testing the SigPipeHandler:
For me it did not work when the debugger was atached. So when running an app directly from XCode the Handler is not called. Meanwhile, on a device without the debugger attached the handler works as expected.
Use old good POSIX code:
#include <signal.h>
void SigPipeHandler(int s);
void SigPipeHandler(int s)
{
// do your handling
}
Init in some place (main.m?) with
signal(SIGPIPE, SigPipeHandler);
Try setting SO_NOSIGPIPE as documented here: How to prevent SIGPIPEs (or handle them properly)
The first answer doesn't work. Also I'm trying to use solution described in reference of second post:
int main(int argc, char *argv[ ]) {
struct sigaction mySigAction;
mySigAction.sa_handler = SIG_IGN;
sigemptyset(&mySigAction.sa_mask);
sigaction(SIGPIPE, &mySigAction, NULL);
...
}
but this code doesn't work too. Anybody know solution of this problem?
The first answer works fine. but you should put every thing in the main.mm
file.
And in static class(Singleton)
, it also works.
#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;
}