2

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

4

1 回答 1

2

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

于 2014-05-28T02:26:33.217 回答