Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para oferecer suporte a IPv4 e IPv6 no Windows XP com Service Pack 1 (SP1) e no Windows Server 2003, um aplicativo precisa criar dois soquetes, um soquete para uso com IPv4 e um soquete para uso com IPv6. Esses dois soquetes devem ser manipulados separadamente pelo aplicativo.
Se um provedor de serviços TCP/IP no Windows XP com SP1 e no Windows Server 2003 oferecer suporte a endereçamento IPv4 e IPv6, ele deverá criar dois soquetes separados e ouvir separadamente nesses soquetes:
- Uma vez para IPv4.
- Uma vez para a família de endereços IPv6.
O Windows Vista e versões posteriores oferecem a capacidade de criar um único soquete IPv6 que pode lidar com o tráfego IPv6 e IPv4. Por exemplo, um soquete de escuta TCP para IPv6 é criado, colocado no modo de pilha dupla e vinculado à porta 5001. Este soquete de pilha dupla pode aceitar conexões de clientes TCP IPv6 que se conectam à porta 5001 e de clientes TCP IPv4 que se conectam à porta 5001. Esse recurso permite um design de aplicativo muito simplificado e reduz a sobrecarga de recursos necessária para lançar operações em dois soquetes separados. No entanto, existem algumas restrições que devem ser cumpridas para usar um soquete de pilha dupla. Para obter mais informações, consulte Dual-Stack Sockets.
WSAEnumProtocols retorna duas estruturas WSAPROTOCOL_INFO para cada um dos tipos de soquete suportados (SOCK_STREAM, SOCK_DGRAM SOCK_RAW). O iAddressFamily deve ser definido como AF_INET para endereçamento IPv4 e AF_INET6 para endereçamento IPv6.
Os endereços IPv6 são descritos nas seguintes estruturas.
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 */
};
Se um aplicativo usa funções do Windows Sockets 1.1 e deseja usar endereços IPv6, ele pode continuar a usar todas as funções antigas que tomam o sockaddr estrutura como um dos parâmetros (ligar, conectar, sendtoe recvfrom, aceitar, e assim por diante). A única alteração necessária é usar sockaddr_in6 em vez de sockaddr_in.
No entanto, as funções de resolução de nomes (gethostbyname, gethostbyaddre assim por diante) e funções de conversão de endereço (inet_addr, inet_ntoa) não podem ser reutilizadas porque pressupõem que um endereço IP tem 4 bytes de comprimento. Um aplicativo que deseja executar a resolução de nomes e a conversão de endereços para endereços IPv6 deve usar funções específicas do Windows Sockets 2. Muitas novas funções foram introduzidas para permitir que os aplicativos Windows Sockets 2 aproveitem o IPv6, incluindo o getaddrinfo e funções de getnameinfo.
Para obter mais informações sobre como habilitar recursos IPv6 em um aplicativo, consulte o Guia IPv6 para aplicativos Windows Sockets.