Управление поведением сокетов IPv4/IPv6 в Java NIO (аналогично флагу IPV6_ONLY в BSD)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Управление поведением сокетов IPv4/IPv6 в Java NIO (аналогично флагу IPV6_ONLY в BSD)

Сообщение Anonymous »

Я работаю над кроссплатформенным проектом с использованием каналов Java NIO и пытаюсь воспроизвести поведение флага IPV6_ONLY (аналогично тому, что доступно в BSD), чтобы контролировать поведение сокетов IPv4 и IPv6 при привязке к один и тот же порт.
Цель состоит в том, чтобы иметь два варианта:
  • Отдельные сокеты для IPv4 и IPv6 — я хочу контролировать могу ли я открыть отдельные сокеты для IPv4 и IPv6 (например, один DatagramChannel для IPv4 и другой для IPv6, каждый из которых привязан к одному и тому же порту).
  • Двухрежимный сокет IPv6 — я хочу использовать один сокет IPv6, который может принимать пакеты как IPv4, так и IPv6, имитируя поведение флага IPV6_ONLY в BSD, который ограничивает прием только сокета IPv6. Пакеты IPv6.
Вот упрощенная версия кода, который я использую:

Код: Выделить всё

// Opening IPv4 DatagramChannel
DatagramChannel ipv4Channel = DatagramChannel.open(StandardProtocolFamily.INET);
ipv4Channel.bind(new InetSocketAddress(port));

// Opening IPv6 DatagramChannel
DatagramChannel ipv6Channel = DatagramChannel.open(StandardProtocolFamily.INET6);
ipv6Channel.bind(new InetSocketAddress(port));
Проблема, с которой я столкнулся, заключается в том, что, хотя DatagramChannel позволяет открывать отдельные каналы для IPv4 и IPv6, существует ограничение, при котором вы не можете открыть второй сокет с другим семейством IP (IPv4 или IPv6). ) на том же порту. Это происходит, если один сокет уже открыт для определенного семейства IP (IPv4 или IPv6). Я получаю сообщение об ошибке «порт уже используется» при попытке привязать второй сокет с другим семейством IP к тому же порту.
Мне нужна возможность:
  • Откройте отдельные сокеты для IPv4 и IPv6 на одном и том же порту (как для DatagramChannel, так и, возможно, для ServerSocketChannel или SocketChannel).
  • Настройте сокет IPv6 для принять оба пакеты IPv4 и IPv6 (например, флаг BSD IPV6_ONLY) и переключать его поведение между приемом только пакетов IPv6 или двойным режимом (IPv4/IPv6).
Есть в Java NIO есть способ:
  • Открыть отдельные сокеты IPv4 и IPv6 на одном и том же порту (не обнаруживая «порт, уже используемый» ошибка)?
  • Настроить сокет IPv6 для приема пакетов IPv4 и IPv6 или реализовать поведение, аналогичное флагу BSD IPV6_ONLY?
Поскольку я пишу кроссплатформенный код, я ищу решение, которое будет работать в разных операционных системах, обеспечивая при этом одинаковый уровень контроля над поведением сокетов.
Некоторые другие разговоры из прошлого на те же темы от я:
  • Настройка каналов Java NIO для IPv4 и IPv6 отдельно
  • Канал Java NIO DatagramChannel: невозможно открыть несколько сокетов на Один и тот же порт с IPv4 и IPv6


Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-flag-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Java NIO DatagramChannel: невозможно открыть несколько сокетов на одном порту с помощью IPv4 и IPv6
    Anonymous » » в форуме Android
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Настройка каналов Java NIO для IPv4 и IPv6 отдельно
    Anonymous » » в форуме Android
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous
  • Как указать разрешение URL-адреса в библиотеке запросов Python аналогично флагу --resolve в Curl?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как принудительно использовать ipv6 или ipv4 для HttpWebRequest или WebRequest C#
    Гость » » в форуме C#
    0 Ответы
    81 Просмотры
    Последнее сообщение Гость
  • Как я могу получить IPv4 или IPv6 пользователя в PHP?
    Гость » » в форуме Php
    0 Ответы
    48 Просмотры
    Последнее сообщение Гость

Вернуться в «Android»