使用 SIO_ADDRESS_LIST_SORT
SIO_ADDRESS_LIST_SORT IOCTL 可讓應用程式開發人員排序 IPv6 和 IPv4 目的地地址清單,以判斷建立連線的最佳可用位址。 Windows XP 和更新版本支援 SIO_ADDRESS_LIST_SORT IOCTL。
在 Windows Vista 和更新版本上, CreateSortedAddressPairs 函 式會取得可能 IP 目的地位址的提供清單、將目的地位址與主機電腦的本機 IP 位址配對,並根據哪一個位址組最適合兩個對等之間的通訊來排序配對。 應該使用 CreateSortedAddressPairs 函式,而不是 Windows Vista 和更新版本上的 SIO_ADDRESS_LIST_SORT IOCTL。
下列各節說明 SIO_ADDRESS_LIST_SORT的使用考慮。
參數
傳遞至 SIO_ADDRESS_LIST_SORT 的緩衝區是 SOCKET_ADDRESS_LIST 結構。 清單中的每個 SOCKET_ADDRESS 都必須SOCKADDR_IN6格式。
SIO_ADDRESS_LIST_SORT IOCTL 會排序 Windows Vista 和更新版本上的 IPv6 和 IPv4 位址。 清單中要排序的任何 IPv4 位址都必須是 IPv4 對應 IPv6 位址格式。 如需 IPv4 對應 IPv6 位址格式的詳細資訊,請參閱 雙堆疊通訊端。
在 Windows Server 2003 和 Windows XP 上, SIO_ADDRESS_LIST_SORT 只會排序 IPv6 位址。 不支援 IPv4 對應 IPv6 位址格式中的 IPv4 位址。
輸出時,如果 IOCTL 程式碼判斷某些目的地位址無效,SOCKET_ADDRESS_LIST結構的iAddressCount成員可能會小於輸入。
排序判斷
SIO_ADDRESS_LIST_SORT IOCTL 之 IPv6 位址的排序次序是以前置詞原則資料表為基礎。 前置詞原則資料表是使用命令列公用程式 Netsh.exe 設定。 下列命令列程式碼片段說明基本 Netsh.exe 前置詞原則資料表組態命令:
netsh interface ipv6 show prefixpolicies
netsh interface ipv6 add prefixpolicy ::/96 3 4
netsh interface ipv6 delete prefixpolicy ::/96
netsh interface ipv6 set prefixpolicy ::/96 3 4
注意
在 Windows Server 2003 和 Windows XP 上,上面列出的第一個 netsh 命令如下所示。 所有其他相關命令都相同。
netsh interface ipv6 show prefixpolicy
位址順序也會由 IETF 所發行的 網際網路通訊協定預設位址選擇第 6 版 (IPv6) RFC 3484 中所述的演算法決定。 如需詳細資訊,請參閱https://www.ietf.org/rfc/rfc3484.txt。 (此資源只能以英文提供。)
SIO_ADDRESS_LIST_SORT IOCTL 會將位址從最佳排序到最差,並視需要填入sin6_scope_id成員。 針對月臺本機位址,SIO_ADDRESS_LIST_SORT填入 scope-id,或移除位址。
SIO_ADDRESS_LIST_SORT IOCTL 會忽略系結至通訊端的來源位址,並且只會依做為參數傳遞的目的地地址清單排序。
應該使用 CreateSortedAddressPairs 函式,而不是 Windows Vista 和更新版本上的 SIO_ADDRESS_LIST_SORT IOCTL。 CreateSortedAddressPairs 函式會傳回位址組的清單,其中包含本機來源位址和目的地位址。 這會為應用程式提供用於每個目的地位址的正確來源位址。 應用程式也可以藉由尋找特定來源位址來篩選結果。 。
規格需求
SIO_ADDRESS_LIST_SORT IOCTL 定義于Winsock2.h標頭檔中。 在針對 Windows Vista 和更新版本發行的 Microsoft Windows 軟體發展工具組 (SDK) 上,標頭檔的組織已 變更,SIO_ADDRESS_LIST_SORT IOCTL 定義于 Ws2def.h 標頭檔中。 請注意, Ws2def.h 標頭檔會自動包含在 Winsock2.h中,不應該直接使用。
Windows XP 和更新版本支援 SIO_ADDRESS_LIST_SORT IOCTL。
相關主題