首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSXPCConnection中使用套接字

在NSXPCConnection中使用套接字
EN

Stack Overflow用户
提问于 2015-01-07 04:18:27
回答 1查看 553关注 0票数 0

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

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

助手进程使用苹果提供的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相关的问题?

EN

回答 1

Stack Overflow用户

发布于 2015-01-07 13:40:36

Ok解决了这个问题。

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

您希望通过更改xpc服务信息plist将其替换为NSRunLoop - done:

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

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

代码语言:javascript
复制
do {
    @autoreleasepool {
        [[NSRunLoop currentRunLoop]run];
    }
} while (YES);

准备就绪后,TCPServer (它需要一个活动的运行循环)将返回回调,您将能够获得传入的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27806541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档