在我的示例应用中,即使我在main.m文件中忽略了该信号,它也会显示SIGPIPE错误
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
signal(SIGPIPE, SIG_IGN);
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
gdb的后跟踪是
#0 0x38579eb4 in mach_msg_trap ()
#1 0x3857a04c in mach_msg ()
#2 0x3605b044 in __CFRunLoopServiceMachPort ()
#3 0x36059d5e in __CFRunLoopRun ()
#4 0x35fccebc in CFRunLoopRunSpecific ()
#5 0x35fccd48 in CFRunLoopRunInMode ()
#6 0x328cf2ea in GSEventRunModal ()
#7 0x32939300 in UIApplicationMain ()
#8 0x000b6c52 in main (argc=1, argv=0x2fd4bc40) at /Users/bdsu/Desktop/Git_repo/VoipApp_iOS/VoipApp_iOS/main.m:17
当我进入待机模式并返回时,会发生此错误。我已经使用IOS 6.0在IPAD上测试了它。 Xcode版本是4.5 / 5.0。
答案 0 :(得分:2)
我的应用程序需要互联网连接,而它的背景。但并非所有应用都获得在后台运行的权限。您必须将应用程序的后台模式设置为voip app,还可以使用其他一些选项使其在后台运行。此外,默认情况下,IOS在后台运行10分钟后暂停所有应用程序,并且套接字正在关闭,这会导致sigpipe
错误。这就是为什么我编写了一个函数,当应用程序转到后台并将使应用程序保持活动状态时将调用该函数。这样,应用程序将在后台运行时获得互联网连接,并避免使用sigpipe
。