即使忽略SIGPIPE信号,IOS 6.0上的SIGPIPE错误

时间:2013-11-07 07:31:29

标签: ios sockets signals sigpipe

在我的示例应用中,即使我在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。

1 个答案:

答案 0 :(得分:2)

我的应用程序需要互联网连接,而它的背景。但并非所有应用都获得在后台运行的权限。您必须将应用程序的后台模式设置为voip app,还可以使用其他一些选项使其在后台运行。此外,默认情况下,IOS在后台运行10分钟后暂停所有应用程序,并且套接字正在关闭,这会导致sigpipe错误。这就是为什么我编写了一个函数,当应用程序转到后台并将使应用程序保持活动状态时将调用该函数。这样,应用程序将在后台运行时获得互联网连接,并避免使用sigpipe