Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby obsługiwać zarówno protokoły IPv4, jak i IPv6 w systemie Windows XP z dodatkiem Service Pack 1 (SP1) i w systemie Windows Server 2003, aplikacja musi utworzyć dwa gniazda, jedno gniazdo do użycia z protokołem IPv4 i jedno gniazdo do użycia z protokołem IPv6. Te dwa gniazda muszą być obsługiwane oddzielnie przez aplikację.
Jeśli dostawca usług TCP/IP w systemie Windows XP z dodatkiem SP1 i w systemie Windows Server 2003 obsługuje adresowanie IPv4 i IPv6, musi utworzyć dwa oddzielne gniazda i nasłuchiwać oddzielnie na tych gniazdach:
- Raz dla protokołu IPv4.
- Raz dla rodziny adresów IPv6.
System Windows Vista i nowsze oferują możliwość utworzenia pojedynczego gniazda IPv6, które może obsługiwać ruch IPv6 i IPv4. Na przykład jest tworzone gniazdo nasłuchiwania TCP dla protokołu IPv6, umieszczane w trybie podwójnego stosu i powiązane z portem 5001. To gniazdo z dwoma stosami może akceptować połączenia od klientów TCP IPv6 łączących się z portem 5001 i z klientów PROTOKOŁU IPv4 łączących się z portem 5001. Ta funkcja umożliwia znacznie uproszczone projektowanie aplikacji i zmniejsza nakład pracy związany z zasobami wymaganymi do delegowania operacji na dwóch oddzielnych gniazdach. Istnieją jednak pewne ograniczenia, które należy spełnić, aby można było użyć gniazda dwustosowego. Aby uzyskać więcej informacji, zobacz Dual-Stack Sockets.
WSAEnumProtocols zwraca dwie struktury WSAPROTOCOL_INFO dla każdego z obsługiwanych typów gniazd (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW). iAddressFamily musi być ustawiona na AF_INET adresowania IPv4 i AF_INET6 adresowania IPv6.
Adresy IPv6 są opisane w poniższych strukturach.
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 */
};
Jeśli aplikacja używa funkcji Windows Sockets 1.1 i chce używać adresów IPv6, może nadal używać wszystkich starych funkcji, które przyjmują strukturę sockaddr sockaddr jako jeden z parametrów (powiązać, połączyć, sendtoi odzyskiwania z, zaakceptowaćitd.). Jedyną wymaganą zmianą jest użycie sockaddr_in6 zamiast sockaddr_in.
Jednak funkcje rozpoznawania nazw (gethostbyname, gethostbyaddri tak dalej) i funkcje konwersji adresów (inet_addr, inet_ntoa) nie mogą być ponownie używane, ponieważ zakładają, że adres IP ma długość 4 bajtów. Aplikacja, która chce wykonać rozpoznawanie nazw i konwersję adresów dla adresów IPv6, musi używać funkcji specyficznych dla gniazd systemu Windows 2. Wprowadzono wiele nowych funkcji, aby umożliwić aplikacjom Windows Sockets 2 korzystanie z protokołu IPv6, w tym getaddrinfo i funkcji getnameinfo.
Aby uzyskać więcej informacji na temat włączania funkcji IPv6 w aplikacji, zobacz przewodnik IPv6 dla aplikacji Windows Sockets.