Почему JGroups на Android использует IPv6 для подключения? - PullRequest
0 голосов
/ 29 октября 2019

С устройства Android я пытаюсь настроить туннель к маршрутизатору Gossip в локальной сети. Я использую это в качестве конфигурации:

<config xmlns="urn:org:jgroups"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.4.xsd">
    <TUNNEL gossip_router_hosts="${jgroups.tunnel.gossip_router_hosts:10.20.30.152[12001]}"/>
</config>

С кодом, подобным этому:

channel = JChannel(context.getAssets().open("jgroups.xml"))
channel.setReceiver(this)
channel.connect("MyGroup")

Однако приложение пытается подключиться через IPv6 по умолчанию, который не отображаетсядля работы:

20096:connect(41, {sa_family=AF_INET6, sin6_port=htons(12001), inet_pton(AF_INET6, "::ffff:10.20.30.152", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)

Это происходит, даже когда я удаляю любые адреса IPv6 из сетевого интерфейса. Я понимаю, что есть флаг JVM для поддержки IPv4, но я считаю, что это не относится к Android. Настройка параметров с помощью adb также не будет хорошим решением.

Есть ли другой способ заставить JGroups использовать IPv4 для подключения? Или есть какой-то другой путь к исправлению?

Я протестировал это на Android 8.0 и вижу поведение с JGroups версий 4.1.6 и 3.6.19.

...