Skip to content

Bind UDP Multicast address Not Working on iOS  #33567

@jaumard

Description

@jaumard

I trying to discover a device on the network with udp multicast. I'm using this code:

final udpSocket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 5544, reuseAddress: true);
    udpSocket.joinMulticast(address);
    final subscription = udpSocket.listen(
      (e) {
        Datagram dg = udpSocket.receive();
        if (dg == null) return;

        String message = new String.fromCharCodes(dg.data);
        if (message.startsWith(wantedResponse)) {
          final data = message.replaceFirst(wantedResponse, '').trim();
          final json = jsonDecode(data);

          final url = '${json['isSecure'] ? 'https' : 'http'}://${dg.address.address}:${json['port']}/';
          completer.complete(url);
        }
      },
      cancelOnError: true,
      onError: completer.completeError,
    );
    udpSocket.send(dataToSend, address, 5544);

But on iOS it crash with:

12:04:24.192 21 info flutter.tools  OS Error: Can't assign requested address, errno = 49
12:04:24.199 22 info flutter.tools  #0      _NativeSocket.joinMulticast (dart:io-patch/socket_patch.dart:1151:28)
12:04:24.199 23 info flutter.tools #1      _RawDatagramSocket.joinMulticast (dart:io-patch/socket_patch.dart:1901:13)
12:04:24.199 24 info flutter.tools #2      LocalServerProvider.search (package:lisa_flutter/src/common/network/local_server_provider.dart:22:15)
12:04:24.199 25 info flutter.tools <asynchronous suspension>
12:04:24.199 26 info flutter.tools #3      HostInterceptor.before (package:lisa_flutter/src/common/network/api_provider.dart:55:53)
12:04:24.199 27 info flutter.tools <asynchronous suspension>
12:04:24.199 28 info flutter.tools #4      Post._send (package:jaguar_resty/routes/routes.dart:681:44)
12:04:24.199 29 info flutter.tools <asynchronous suspension>
12:04:24.199 30 info flutter.tools #5      Post.go (package:jaguar_resty/routes/routes.dart:723:41)
12:04:24.199 31 info flutter.tools #6      _LoginApi&ApiClient&_$LoginApiClient.login (package:lisa_server_sdk/api/login_api.jretro.dart:16:16)
12:04:24.199 32 info flutter.tools <asynchronous suspension>
12:04:24.199 33 info flutter.tools #7      LoginApi.login (package:lisa_server_sdk/api/login_api.dart:28:22)
12:04:24.199 34 info flutter.tools #8      _LoginBloc.login (package:lisa_flutter/src/login/bloc/login_bloc.dart:61:51)
12:04:24.200 35 info flutter.tools <asynchronous suspension>
12:04:24.200 36 info flutter.tools #9      LoginBloc.login.<anonymous closure> (package:lisa_flutter/src/login/bloc/login_bloc.g.dart:63:47)
12:04:24.200 37 info flutter.tools #10     _rootRun (dart:async/zone.dart:1124:13)
12:04:24.200 38 info flutter.tools #11     _ZoneDelegate.run (dart:async/zone.dart:711:19)
12:04:24.200 39 info flutter.tools #12     AsyncAction._run (package:mobx/src/api/async/async_action.dart:41:29)
12:04:24.200 40 info flutter.tools #13     _CustomZone.run (dart:async/zone.dart:1021:19)
12:04:24.200 41 info flutter.tools #14     AsyncAction.run (package:mobx/src/api/async/async_action.dart:26:26)
12:04:24.200 42 info flutter.tools <asynchronous suspension>
12:04:24.200 43 info flutter.tools #15     LoginBloc.login (package:lisa_flutter/src/login/bloc/login_bloc.g.dart:63:31)
12:04:24.200 44 info flutter.tools #16     LoginScreen.build.<anonymous closure> (package:lisa_flutter/src/login/presentation/login_screen.dart:82:45)
12:04:24.202 45 info flutter.tools #17     ProgressButton.build.<anonymous closure> (package:lisa_flutter/src/common/presentation/loading_button.dart:58:40)
12:04:24.202 46 info flutter.tools <asynchronous suspension>
12:04:24.202 47 info flutter.tools #18     _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:635:14)
12:04:24.202 48 info flutter.tools #19     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:711:32)
12:04:24.202 49 info flutter.tools #20     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:181:24)
12:04:24.202 50 info flutter.tools #21     TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:352:11)
12:04:24.202 51 info flutter.tools #22     TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:264:7)
12:04:24.204 52 info flutter.tools #23     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:450:9)
12:04:24.204 53 info flutter.tools #24     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
12:04:24.204 54 info flutter.tools #25     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:100:11)
12:04:24.204 55 info flutter.tools #26     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
12:04:24.204 56 info flutter.tools #27     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
12:04:24.205 57 info flutter.tools #28     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
12:04:24.205 58 info flutter.tools #29     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
12:04:24.205 59 info flutter.tools #30     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
12:04:24.206 60 info flutter.tools #31     _rootRunUnary (dart:async/zone.dart:1136:13)
12:04:24.206 61 info flutter.tools #32     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
12:04:24.206 62 info flutter.tools #33     _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7)
12:04:24.206 63 info flutter.tools #34     _invoke1 (dart:ui/hooks.dart:234:10)
12:04:24.206 64 info flutter.tools #35     _dispatchPointerDataPacket (dart:ui/hooks.dart:154:5)

I also test on Mac osX app and it work without issue, in pur dart too. No issue, only iOS

Env:

[✓] Flutter (Channel dev, v1.6.5, on Mac OS X 10.14.5 18F132, locale fr-FR)
    • Flutter version 1.6.5 at /Users/jaumard/flutter
    • Framework revision 7c811b6a66 (2 days ago), 2019-05-28 10:19:19 -0700
    • Engine revision 8dc3a4cde2
    • Dart version 2.3.2 (build 2.3.2-dev.0.0 e3edfd36b2)

 
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/jaumard/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 10.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.2.1, Build version 10E1001
    • CocoaPods version 1.5.3

[✓] iOS tools - develop for iOS devices
    • ios-deploy 1.9.4

[✓] Android Studio (version 3.4)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 35.3.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[✓] IntelliJ IDEA Ultimate Edition (version 2019.1.2)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 35.3.3
    • Dart plugin version 191.7221

[✓] Connected device (3 available)
    • Pixel 3a         • 94HAY0P9MP                               • android-arm64 • Android 9 (API 28)
    • iPhone de Andrea • 09e05a2baacde4b9261c05f770f8df6cfb1ec4b8 • ios           • iOS 12.2
    • macOS            • macOS                                    • darwin-x64    • Mac OS X 10.14.5 18F132

• No issues found!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions