iOS 14 выдает «Ошибка ОС: неверный дескриптор файла, errno = 9» при широковещательной передаче по локальной сети

#flutter #udp #multicast #ios14

Вопрос:

Здесь задаем вопросы и ответы в стиле Jeopardy.

Я разрабатываю приложение на Flutter, которое использует пакет udp для широковещательной передачи в локальной сети. Это отлично работало на Android, Windows, macOS и iOS, пока я не попробовал на устройстве iOS 14.6.

Поток кода в основном выглядит следующим образом:

 var endPoint = Endpoint.broadcast(port: Port(6000));
var udpFuture = UDP.bind(Endpoint.any(port: Port(6000)));
udpFuture.then((udp) {
   udp.listen((datagram) {
       handleMessage(datagram.data);
   });
   udp.send(bytesToSend, endPoint);
}
 

Сообщение об ошибке, которое я получаю, таково: Unhandled Exception: OS Error: Bad file descriptor, errno = 9

Ответ №1:

Начиная с iOS 14, вашему приложению требуется разрешение на многоадресную сеть com.apple.developer.networking.multicast , чтобы иметь возможность отправлять или получать многоадресный трафик IP.

Чтобы получить право, вам необходимо подать заявку, используя форму запроса Apple. Мне потребовалось 4-5 дней, прежде чем я получил одобрение запроса.

Затем вы можете следовать инструкциям на форумах Apple, чтобы начать и запустить.