0

我不是在谈论可达性。如何为NSURLSession连接选择特定的网络接口?

我说什么是搞清楚如何从iOS设备在整个蜂窝接口的网络连接。

为什么?因为我有条件将设备连接到WiFi接入点,因此它选择WiFi ...但该接入点未连接到互联网,无法连接。我有一些数据,我必须尽一切努力提供,有些情况下,它会在WiFi网关中流失到炼狱。在使用可达性和依靠MPTCP的两种情况下,Apple已经在堆栈中优先考虑WiFi。

我知道NSURLSessionConfiguration可以设置allowsCellularAccess允许蜂窝接入 - 我期待需要细胞的路由。

即使在CFNetwork水平我期待在kCFStreamPropertyConnectionIsCellular的状态,kCFStreamPropertyNoCellular禁用细胞。

我无法找到任何优先选择的蜂窝无线电。我意识到苹果公司已经竭尽全力地选择WiFi,我反对这一点 - 这就是为什么我很难找到答案。

我想在可可水平保持下去,但并不反对进入基金会或更深的层次。我想避免尝试解析接口表(如果它甚至可以访问)来确定哪个是蜂窝接口。

尽管WiFi似乎存在,是否有人通过蜂窝链接成功创建了网络连接?

Multipath TCP答案这里的一些配置?

回答

0

绑定到特定的接口,据我所知,你不得不一路下降到原始套接字水平,而且也没有办法提供NSURLSession目的的自定义插座,所以你基本上就是从头开始重写它。你应该提交一个bug,要求支持将NSURLSession绑定到源IP。

您遇到的行为是iOS和已断开网络的已知问题。 iOS 9和更高版本做得更好,但即使如此,它们也可能会造成很大的问题;这些设备有时会拒绝与Wi-Fi网络通话,有时会拒绝与蜂窝网络通话。具体而言,如果任一信号较弱,似乎都会失败。就在今天上午,我实际上不得不强迫我的iPhone(iOS 10)通过将其置于飞行模式并仅启用Wi-Fi来与断开的Wi-Fi网络通话。

有人告诉我,你可以通过配置网络的DHCP服务器无法提供路由器通告解决这个问题;那就是说,每当我尝试过时,iOS设备都会不断要求重复提供商品。也许这个错误在某个时候得到了修正。如果是这样,它可能是值得一试的,但不要指望它可以在旧版本的iOS中工作。

如果不这样做,假设您不需要在iOS 3和更早版本中支持Web浏览器,则可以尝试完全消除该Wi-Fi网络上的DHCP服务器,并且只依靠零conf IP的DNS服务发现。这样,设备将不会看到路由器,并且不会尝试从该接口发送数据,除了那些链路本地IP。

如果由于某种原因无法实现,通常我会建议使用libcurl的自定义副本,除非我怀疑这会适用于您的情况,因为POSIX网络不会唤醒蜂窝硬件。

+0

良好的信息 - 尽管坏消息。 在我的特殊情况下,WiFi信号很强,并且需要通知SSID。 还有一些条件要求阻止接入点的出站侧创建此带宽真空 - 当这些条件被删除时,接入点将打开回互联网。 我听说“WiFi协助”对此有所帮助。也许调整NSURLSessionConfiguration以降低超时阈值可能会导致它更快地转移到蜂窝“辅助”。 – Thompsonian