入站 CFSocket 连接"would like to find and connect to devices on your local network"错误



我们有一个IOS应用程序,侦听INADDR_ANY套接字连接,以使用CFSocketCreate/CFSocketGetNative/CFSocketCreateRunLoopSource/CFStreamCreatePairWithSocket等进行入站连接(通过HTTP显示调试信息(。

(因此它属于"监听并接受传入TCP连接"类别(。

如果第一个传入套接字连接发生在新安装的应用程序上,我们会遇到上面提到的错误。由于我们既不使用Bonjour也不使用getpeername(),我想知道问题出在哪里。显然,对话框如何关闭并不重要,我们的程序可以工作。但这对我们(QA更难(和我们的客户来说当然很烦人。

你知道问题出在哪里吗?我研究了所有与此相关的问题,但我认为我们没有使用触发对话框的"禁用"API之一

如果我为NSStreamDelegatestream:handleEvent:函数设置了一个断点,则弹出窗口会在NSStreamEventOpenCompleted之前出现,因此NSStream处理的某些内部原因导致了这种情况。

在调试控制台上,显示btw:[connection] nw_connection_copy_connected_path [C1] Client called nw_connection_copy_connected_path on unconnected nw_connection 2022-04-06 17:28:55.811551+0200 GenMob[35630:3181485] [] tcp_connection_is_cellular No connected path

我确实拼凑了一个小的演示应用程序,可以从https://github.com/leopatras/cfsocket.

为了记录在案,我们最终重写了代码,将普通Berkeley套接字与GCD dispatch_source机制一起使用。。。有一个正在工作的套接字服务器示例而不是触发的本地网络提示https://github.com/leopatras/GCDSimpleSocketServer/

dispatch_source_zzz函数允许类似的事件驱动方法,如CFStreamCreatePairWithSocket函数。与https://github.com/leopatras/cfsocket它需要更少的代码。如果本地网络提示总是被触发是有问题的,它可能取决于其他参数,如使用的dev证书/配置文件。

我和苹果的支持人员就这个话题进行了深入的交流,(他们最初无法重现我们的问题,但在几台设备上重试后,他们也得到了它(:他们确实建议使用新的网络框架函数,而不是Berkeley套接字(请参阅https://developer.apple.com/documentation/network?language=objc)我努力使用它们,但我没能在obj-C中创建一个简单可靠的工作echo服务器(没有尝试Swift路由(。

最新更新