vlc | branch: master | Hugo Beauzée-Luyssen <h...@beauzee.fr> | Wed Feb 7 18:05:19 2018 +0100| [497fb40d5fd467bf613dd42ba22636b5411705ca] | committer: Hugo Beauzée-Luyssen
contribs: microdns: Fix scan failure when connectivity gets restored This happened on every Android versions prior to Oreo. Issue is unreproducible on windows/linux/iOS Apparently Android fails to accept interface 0 as the default one. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=497fb40d5fd467bf613dd42ba22636b5411705ca --- ...st_join-Work-around-an-issue-in-android-8.patch | 42 ++++++++++++++++++++++ contrib/src/microdns/rules.mak | 3 ++ 2 files changed, 45 insertions(+) diff --git a/contrib/src/microdns/0001-os_mcast_join-Work-around-an-issue-in-android-8.patch b/contrib/src/microdns/0001-os_mcast_join-Work-around-an-issue-in-android-8.patch new file mode 100644 index 0000000000..916aebac64 --- /dev/null +++ b/contrib/src/microdns/0001-os_mcast_join-Work-around-an-issue-in-android-8.patch @@ -0,0 +1,42 @@ +From 508d617dc3b1032e553475fbe9819eda8b55468c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= <h...@beauzee.fr> +Date: Wed, 7 Feb 2018 18:00:06 +0100 +Subject: [PATCH] os_mcast_join: Work around an issue in android < 8 + +Before Android 8, using MCAST_JOIN_GROUP with group_req::gr_interface +right after the connection gets established will always fail with +ENODEV. +Doing so on Oreo works fine. +When the interface is forced to any non-0 index, all is good. +--- + compat/compat.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/compat/compat.c b/compat/compat.c +index 46b3079..a1fc7d6 100644 +--- a/compat/compat.c ++++ b/compat/compat.c +@@ -151,9 +151,19 @@ os_mcast_join(sock_t s, const struct sockaddr_storage *ss, multicast_if mintf) + + memset(&mgroup, 0, sizeof(mgroup)); + memcpy(&mgroup.gr_group, ss, ss_len(ss)); ++#ifdef __ANDROID__ ++ while ( mgroup.gr_interface <= 5 ) ++#endif ++ { + if (setsockopt(s, ss_level(ss), MCAST_JOIN_GROUP, +- (const void *) &mgroup, sizeof(mgroup)) < 0) ++ (const void *) &mgroup, sizeof(mgroup)) < 0) { ++#ifdef __ANDROID__ ++ mgroup.gr_interface++; ++ continue; ++#endif + return (-1); ++ } ++ } + #else + union { + struct sockaddr_storage ss; +-- +2.11.0 + diff --git a/contrib/src/microdns/rules.mak b/contrib/src/microdns/rules.mak index d979e2a3c0..d087aecdcc 100644 --- a/contrib/src/microdns/rules.mak +++ b/contrib/src/microdns/rules.mak @@ -19,6 +19,9 @@ $(TARBALLS)/microdns-$(LIBMICRODNS_VERSION).tar.gz: microdns: microdns-$(LIBMICRODNS_VERSION).tar.gz .sum-microdns $(UNPACK) +ifdef HAVE_ANDROID + $(APPLY) $(SRC)/microdns/0001-os_mcast_join-Work-around-an-issue-in-android-8.patch +endif $(MOVE) .microdns: microdns _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits