将套接字与 NSXPCConnection 配合使用



将套接字与 NSXPCConnection 一起使用时遇到问题。

基本上,有一个主进程和一个辅助进程正在运行,通过NSXPCConnection建立。该帮助程序进程需要充当服务器并侦听接收外部连接的特定端口(例如 111)。

帮助程序进程使用 Apple 提供的 TCPServer 帮助程序类(CFSocket 周围的包装器)打开侦听套接字。代码在这里找到:https://code.google.com/p/iphone-remotepad/source/browse/trunk/RemotePad/TCPServer.h?r=238

插座在 - (BOOL)start:(NSError **)error 中成功打开。

外部客户端可以使用 111 端口建立。(通过telnet localhost 111在终端中测试)。

但是,帮助程序进程永远不会收到 TCPServer 回调TCPServerAcceptCallBack

帮助程序进程已启用com.apple.security.network.client授权。

此外,当我在主应用程序中运行 TCPServer 而不是帮助程序进程时,在端口 111 上设置服务器,并尝试连接到端口 111,我确实会收到回调。

关于为什么帮助程序进程没有收到套接字回调的任何想法?与 XPC 相关的问题?

好的,我想

出了问题。

xpc 服务为您提供 dispatch_main 类型的默认运行循环。

您希望将其替换为 NSRunLoop - 通过更改 xpc 服务信息列表来完成:

https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html

完成此操作后,您需要在 xpc 服务中手动创建一个运行循环,如下所示:

do {
    @autoreleasepool {
        [[NSRunLoop currentRunLoop]run];
    }
} while (YES);

完成此操作后,TCPServer(需要活动的运行循环)将返回回调,您将能够获取传入的数据。

相关内容

  • 没有找到相关文章

最新更新