共用方式為


IPv6 支援

若要在 Windows XP 上使用 Service Pack 1 (SP1) 和 Windows Server 2003 支援 IPv4 和 IPv6 上的 IPv4 和 IPv6,應用程式必須建立兩個通訊端、一個通訊端與 IPv4 搭配使用,以及一個通訊端搭配 IPv6 使用。 這兩個通訊端必須由應用程式分開處理。

如果具有 SP1 和 Windows Server 2003 之 Windows XP 上的 TCP/IP 服務提供者支援 IPv4 和 IPv6 定址,則必須建立兩個不同的通訊端,並在這些通訊端上個別接聽:

  • IPv4 一次。
  • IPv6 位址系列一次。

Windows Vista 和更新版本可讓您建立單一 IPv6 通訊端,以處理 IPv6 和 IPv4 流量。 例如,會建立 IPv6 的 TCP 接聽通訊端、進入雙重堆疊模式,並系結至埠 5001。 此雙堆疊通訊端可以接受從連線到埠 5001 的 IPv6 TCP 用戶端連線,以及從連線到埠 5001 的 IPv4 TCP 用戶端進行連線。 這項功能可大幅簡化應用程式設計,並減少在兩個不同的通訊端上張貼作業所需的資源額外負荷。 不過,必須符合一些限制,才能使用雙堆疊通訊端。 如需詳細資訊,請參閱 雙重堆疊通訊端

WSAEnumProtocols 會針對每個支援的通訊端類型傳回兩 個WSAPROTOCOL_INFO 結構, (SOCK_STREAM SOCK_DGRAM SOCK_RAW) 。 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 結構做為其中一個參數的舊函式, (bindconnectsendtorecvfromaccept等等) 。 唯一需要的變更是使用 sockaddr_in6 ,而不是 使用 sockaddr_in

不過,名稱解析函式 (gethostbyname、gethostbyaddr等等) 和位址轉換函式 (inet_addr,inet_ntoa無法重複使用) ,因為它們假設 IP 位址長度為 4 個位元組。 想要執行 IPv6 位址名稱解析和位址轉換的應用程式必須使用 Windows Sockets 2 特定函式。 引進許多新的函式,可讓 Windows Sockets 2 應用程式利用 IPv6,包括 getaddrinfogetnameinfo 函式。

如需如何在應用程式中啟用 IPv6 功能的詳細資訊,請參閱 Windows 通訊端應用程式的 IPv6 指南