Должен ли я прослушивать соединения IPv6 на отдельном порту, чем IPv4? - PullRequest
4 голосов
/ 16 июня 2011

У меня есть программа, которая прослушивает соединения и обрабатывает их.Мне известно, что многие сетевые стеки поддерживают прием подключений IPv4 и IPv6 через один сокет / порт, но я также слышал, что Windows XP не входит в их число.В целях обеспечения того, чтобы один и тот же код хорошо работал на всех платформах, должен ли я просто прослушивать соединения IPv6 на отдельном порту?

Ответы [ 2 ]

5 голосов
/ 18 июня 2011

Windows XP SP2 + реализует архитектуру dual-stack IP. Это означает, что вы можете иметь два сокета (один для AF_INET и другой для семейства AF_INET6), которые связаны с одним и тем же номером порта. Это работает довольно хорошо.

Примечание : если вы намеревались иметь один сокет для обработки подключений как IPv4, так и IPv6, то вы зависите от так называемой архитектуры dual IP layer stack, реализованной в Windows Vista и более поздних версиях (в этом случае вы ' Вам придется отключить опции IPV6_V6ONLY в этом сокете).

См. Цели Microsoft для IP версии 6

Проверьте также общие рекомендации в Аспекты применения перехода IPv6 (RFC 4038) .

PS: в настоящее время принятый ответ BiggsTRC, как правило, неточный, как объяснено в соответствующих комментариях. Однако, если вы в порядке с использованием двух номеров портов - тогда этот ответ по-прежнему имеет смысл.

PS2: я использовал терминологию из связанной статьи. Не уверен, что любая другая платформа использует этот вид разделения между dual-stack и dual-layer терминами.

0 голосов
/ 16 июня 2011

Если вы ищете совместимость с платформой XP, самый простой ответ - прослушивание двух отдельных портов. Если вы хотите усложнить задачу, вы, вероятно, могли бы обнаружить ОС и определить порты во время выполнения или что-то в этом роде, но это кажется слишком сложным, когда простое наличие двух портов решит проблему.

Вот ссылка с дополнительной информацией по IPv6 и XP:

http://msdn.microsoft.com/en-us/library/bb513665(v=vs.85).aspx

...