IPv6 지원
WINDOWS XP에서 SP1(서비스 팩 1)과 Windows Server 2003에서 IPv4 및 IPv6을 모두 지원하려면 애플리케이션에서 IPv4에 사용할 소켓 1개와 IPv6에 사용할 소켓 1개 등 두 개의 소켓을 만들어야 합니다. 이러한 두 소켓은 애플리케이션에서 별도로 처리해야 합니다.
WINDOWS XP SP1 및 Windows Server 2003의 TCP/IP 서비스 공급자가 IPv4 및 IPv6 주소 지정을 지원하는 경우 두 개의 별도 소켓을 만들고 다음 소켓에서 별도로 수신 대기해야 합니다.
- IPv4에 한 번.
- IPv6 주소 패밀리에 대해 한 번.
Windows Vista 이상에서는 IPv6 및 IPv4 트래픽을 모두 처리할 수 있는 단일 IPv6 소켓을 만드는 기능을 제공합니다. 예를 들어 IPv6용 TCP 수신 대기 소켓이 만들어지고 이중 스택 모드로 전환되며 포트 5001에 바인딩됩니다. 이 이중 스택 소켓은 포트 5001에 연결하는 IPv6 TCP 클라이언트와 포트 5001에 연결하는 IPv4 TCP 클라이언트의 연결을 허용할 수 있습니다. 이 기능을 사용하면 애플리케이션 디자인을 크게 간소화하고 별도의 두 소켓에 작업을 게시하는 데 필요한 리소스 오버헤드를 줄일 수 있습니다. 그러나 이중 스택 소켓을 사용하려면 몇 가지 제한 사항을 충족해야 합니다. 자세한 내용은 이중 스택 소켓을 참조하세요.
WSAEnumProtocols는 지원되는 각 소켓 유형( SOCK_STREAM , SOCK_DGRAM, SOCK_RAW)에 대해 두 개의 WSAPROTOCOL_INFO 구조를 반환합니다. iAddressFamily는 IPv4 주소 지정에 대해 AF_INET, IPv6 주소 지정에 AF_INET6 설정해야 합니다.
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 Sockets 1.1 함수를 사용하고 IPv6 주소를 사용하려는 경우 sockaddr 구조를 매개 변수 중 하나로 사용하는 모든 이전 함수를 계속 사용할 수 있습니다(바인딩, 연결, sendto 및 recvfrom, 수락 등). 필요한 유일한 변경 내용은 sockaddr_in 대신 sockaddr_in6 사용하는 것입니다.
그러나 이름 확인 함수(gethostbyname, gethostbyaddr 등) 및 주소 변환 함수(inet_addr, inet_ntoa)는 IP 주소 길이가 4바이트라고 가정하므로 다시 사용할 수 없습니다. IPv6 주소에 대한 이름 확인 및 주소 변환을 수행하려는 애플리케이션은 Windows 소켓 2 관련 함수를 사용해야 합니다. Getaddrinfo 및 getnameinfo 함수를 포함하여 Windows Sockets 2 애플리케이션이 IPv6을 활용할 수 있도록 하는 많은 새로운 함수가 도입되었습니다.
애플리케이션에서 IPv6 기능을 사용하도록 설정하는 방법에 대한 자세한 내용은 Windows 소켓 애플리케이션에 대한 IPv6 가이드를 참조하세요.