С устройства 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.