0

Я не говорю о достижимости.Как выбрать конкретный сетевой интерфейс для соединений NSURLSession?

Что я говорю о том, как создать сетевое соединение с устройства iOS через сотовый интерфейс.

Почему? Поскольку у меня есть условия, когда устройство подключается к точке доступа WiFi, поэтому он выбирает WiFi ... но эта точка доступа не подключена к Интернету и не идет нигде. У меня есть данные, которые я должен приложить все усилия для доставки, и в некоторых случаях он теряется в шлюзе WiFi в чистилище. В обоих случаях использования Reachability и использования MPTCP Apple уже отдала приоритет Wi-Fi в стеке.

Я знаю NSURLSessionConfiguration можно установить allowsCellularAccess в позволяет клеточный доступа - Я ищу требует сотовой связи для маршрутизации.

Даже на CFNetwork уровне я смотрю на kCFStreamPropertyConnectionIsCellular для статуса, kCFStreamPropertyNoCellular на отключить сотовой связи.

Я не могу найти в любом случае, чтобы отдать предпочтение сотовому радио. Я понимаю, что Apple пошла на многое, предпочитая WiFi, и я собираюсь против этого - вот почему я испытываю такую ​​трудность в поиске ответа на этот вопрос.

Я хотел бы сохранить это на уровне Какао, но не против вхождения в Фонд или более глубокие уровни. Я хотел бы избежать попытки разобрать таблицу интерфейса (если она даже доступна), чтобы выяснить, что такое сотовый интерфейс.

Кто-нибудь успешно создал сетевое соединение по сотовой связи, несмотря на то, что Wi-Fi появился?

Есть ли какая-то конфигурация Multipath TCP здесь?

ответ

0

Для привязки к определенному интерфейсу, насколько мне известно, вам придется полностью отказаться до уровня сырого сокета, и нет способа предоставить настраиваемый сокет для целей NSURLSession, поэтому вы 'd в основном переписывать его с нуля. Вы должны указать ошибку, запрашивающую поддержку привязки NSURLSession к исходному IP-адресу.

Поведение, с которым вы столкнулись, является известной проблемой для iOS и отключенных сетей. iOS 9 и более поздние работают лучше, но даже тогда они могут быть очень проблематичными; устройства иногда отказываются разговаривать с сетью Wi-Fi и иногда отказываются разговаривать с сотовой сетью. В частности, это кажется неудачным эффектно, если любой сигнал слабый. Только сегодня утром мне пришлось заставить iPhone (iOS 10) поговорить с отключенной сетью Wi-Fi, поставив его в режиме полета и включив только Wi-Fi.

Мне сказали, что вы можете исправить это, настроив DHCP-сервер сети, чтобы не предоставлять рекламу маршрутизатора; что каждый раз, когда я это пробовал, устройство iOS просто продолжало просить предложение повторно. Возможно, эта ошибка была исправлена ​​в какой-то момент. Если это так, возможно, стоит сделать это, но не ожидайте, что он будет работать в более старых версиях iOS.

В противном случае, если вы не нуждаетесь в поддержке веб-браузеров в iOS 3 и более ранних версиях, вы можете полностью устранить DHCP-сервер в этой сети Wi-Fi и просто полагаться на обнаружение службы DNS с помощью ноль-conf IP-адресов , Таким образом, устройство не увидит маршрутизатор и не попытается отправить данные из этого интерфейса, кроме тех, которые связаны с локальными IP-адресами.

Если это по какой-то причине невозможно, обычно я предлагаю использовать индивидуальную копию libcurl, за исключением того, что я сомневаюсь, что это будет работать в вашем случае, потому что POSIX-сеть не разбудит сотовую аппаратуру.

+0

Хорошая информация - несмотря на плохие новости. В моем конкретном случае сигнал Wi-Fi сильный и требуется для объявления SSID. Существуют также условия, которые требуют блокировки исходящей стороны точки доступа, создающей этот вакуум ширины полосы пропускания - когда эти условия удаляются, точка доступа открывается обратно в Интернет. Я слышал, что «WiFi Assist» помогает в этом. Возможно, исправленная NSURLSessionConfiguration, чтобы снизить пороговые значения таймаута, может привести к более быстрому переходу на сотовую «помощь». – Thompsonian

Смежные вопросы