Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для поддержки IPv4 и IPv6 в Windows XP с пакетом обновления 1 (SP1) и в Windows Server 2003 приложение должен создать два сокета, один сокет для использования с IPv4 и один сокет для использования с IPv6. Эти два сокета должны обрабатываться отдельно приложением.
Если поставщик служб TCP/IP в Windows XP с пакетом обновления 1 (SP1) и Windows Server 2003 поддерживает адресацию IPv4 и IPv6, он должен создавать два отдельных сокета и прослушивать отдельно на этих сокетах:
- Один раз для IPv4.
- Один раз для семейства адресов IPv6.
Windows Vista и более поздних версий предлагают возможность создать один сокет IPv6, который может обрабатывать трафик IPv6 и IPv4. Например, создается сокет прослушивания TCP для IPv6, помещается в режим двойного стека и привязан к порту 5001. Этот сокет с двойным стеком может принимать подключения от клиентов TCP IPv6, подключающихся к порту 5001 и от клиентов TCP IPv4, подключающихся к порту 5001. Эта функция позволяет значительно упростить проектирование приложения и сократить затраты на ресурсы, необходимые для размещения операций на двух отдельных сокетах. Однако существуют некоторые ограничения, которые необходимо выполнить для использования сокета с двумя стеками. Дополнительные сведения см. в разделе Dual-Stack Сокеты.
WSAEnumProtocols возвращает две структуры WSAPROTOCOL_INFO для каждого из поддерживаемых типов сокетов (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW). iAddressFamily необходимо задать для AF_INET для адресации IPv4 и AF_INET6 для IPv6-адресов.
Адреса IPv6 описаны в следующих структурах.
struct in_addr6 {
u_char s6_addr[16]; /* IPv6 address */
};
struct sockaddr_in6 {
short sin6_family; /* AF_INET6 */
u_short sin6_port; /* Transport level port number */
u_long sin6_flowinfo; /* IPv6 flow information */
struct in_addr6 sin6_addr; /* IPv6 address */
u_long sin6_scope_id; /* set of interfaces for a scope */
};
Если приложение использует функции Сокетов Windows 1.1 и хочет использовать IPv6-адреса, оно может продолжать использовать все старые функции, которые принимают структуру sockaddr в качестве одного из параметров (привязки, подключиться, sendtoи recvfrom, принятьи т. д.). Единственное необходимое изменение — использовать sockaddr_in6 вместо sockaddr_in.
Однако функции разрешения имен (gethostbyname, gethostbyaddrи т. д.) и функции преобразования адресов (inet_addr, inet_ntoa) нельзя повторно использовать, так как они предполагают, что IP-адрес составляет 4 байта. Приложение, которое хочет выполнить разрешение имен и преобразование адресов для IPv6-адресов, должно использовать функции Windows Sockets 2. Появились многие новые функции, позволяющие приложениям Windows Sockets 2 воспользоваться преимуществами IPv6, включая функции getaddrinfo и getnameinfo.
Дополнительные сведения о включении возможностей IPv6 в приложении см. в руководстве IPv6 для приложений сокетов Windows.