【问题标题】:"would like to find and connect to devices on your local network" error with inbound CFSocket connection入站 CFSocket 连接出现“想查找并连接到本地网络上的设备”错误
【发布时间】:2022-11-09 07:27:50
【问题描述】:

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

(因此它属于“侦听和接受传入 TCP 连接”类别)。

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

知道可能是什么问题吗? 我查看了此处相关的所有问题,但我认为我们没有使用触发对话的“禁止”API 之一

如果我为NSStreamDelegatestream:handleEvent: 函数设置断点,则会出现弹出窗口NSStreamEventOpenCompleted,所以看起来 NSStream 处理的一些内部原因导致了这个。

在调试控制台上,顺便说一句: [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 下载的小型演示应用程序。

【问题讨论】:

    标签: ios


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多