Winsock IOCTLs
本節說明 Windows 作業系統各種版本的 Winsock Socket 輸入/輸出控制項 (IOCTLs) 。 使用 WSAIoctl 或 WSPIoctl 函式發出 Winsock IOCTL 來控制通訊端、傳輸通訊協定或通訊子系統的模式。
某些 Winsock IOCTLs 需要比此資料表所能傳達的更多說明;這類選項包含其他主題的連結。
您可以採用一種編碼配置來保留目前定義的 ioctlsocket opcode,同時提供方便的方式來分割 dwIoControlCode 參數中的 opcode 識別碼空間,現在是 32 位實體。 dwIoControlCode參數是建置,以在新增控制程式代碼時允許通訊協定和廠商獨立,同時保留與 Windows Sockets 1.1 和 Unix 控制項代碼的回溯相容性。 dwIoControlCode參數的格式如下。
I | O | V | T | 廠商/位址系列 | 程式碼 |
---|---|---|---|---|---|
3 | 3 | 2 | 2 2 | 2 2 2 2 2 2 2 1 1 1 1 | 1 1 1 1 1 1 |
1 | 0 | 9 | 8 7 | 6 5 4 3 2 1 0 9 8 7 6 | 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 |
注意
資料表中顯示的 dwIoControlCode 參數中的位必須依資料行從上到下垂直讀取。 因此,最左邊的位是位 31,下一個位是位 30,而最右邊的位是位 0。
如果輸入緩衝區對程式碼有效,則設定為與 IOC_IN相同。
如果輸出緩衝區對程式碼有效,則設定 O,如同 IOC_OUT。 使用輸入和輸出緩衝區控制程式代碼會同時設定 I 和 O。
如果沒有程式碼的參數,則會設定 V,如同 IOC_VOID。
T 是定義 IOCTL 類型的 2 位數量。 定義下列值:
0 IOCTL 是標準 Unix IOCTL 程式碼,如同 FIONREAD 和 FIONBIO。
1 IOCTL 是一般 Windows Sockets 2 IOCTL 程式碼。 針對 Windows Sockets 2 定義的新 IOCTL 程式碼將會有 T == 1。
2 IOCTL 僅適用于特定位址系列。
3 IOCTL 僅適用于特定廠商的提供者,如同 IOC_VENDOR。 此類型可讓公司獲派廠商號碼,該號碼會出現在 Vendor/Address 系列 參數中。 然後,廠商可以定義該廠商特有的新 IOCTL,而不需要向清除中心註冊 IOCTL,進而提供廠商的彈性和隱私權。
廠商/位址系列 11 位數量,定義如果 T == 3) 或包含程式碼 (套用至其中之位址系列的廠商,如果 T == 2) ,則定義擁有程式碼 (的廠商。 如果這是 Unix IOCTL 程式碼 (T == 0) ,則此參數的值與 Unix 上的程式碼相同。 如果這是泛型 Windows Sockets 2 IOCTL (T == 1) ,則可以使用此參數做為程式碼參數的延伸,以提供額外的程式碼值。
代碼 包含作業特定 IOCTL 程式碼的 16 位數量。
Unix IOCTL 程式碼
支援下列 Unix IOCTL 程式碼 (命令) 。
FIONBIO
在 通訊端上啟用或停用非封鎖模式。 lpvInBuffer參數會指向不帶正負號的長 (QoS) ,如果啟用非封鎖模式,則為非零,如果停用則為零。 建立通訊端時,它會在封鎖模式中運作 (也就是停用非封鎖模式) 。 這與 BSD 通訊端一致。
WSAAsyncSelect或WSAEventSelect常式會自動將通訊端設定為非封鎖模式。 如果通訊端上發出 WSAASyncSelect 或 WSAEventSelect ,則任何嘗試使用 WSAIoctl 將通訊端設定回封鎖模式將會失敗,WSAEINVAL。 若要將通訊端設定回封鎖模式,應用程式必須先呼叫lEvent參數等於零的WSAAsyncSelect 來停用 WSAAsyncSelect,或藉由呼叫lNetworkEventSelect等於零的WSAEventSelect來停用WSAEventSelect。
FIONREAD
判斷 可從通訊端讀取不可部分完成的資料量。 lpvOutBuffer參數會指向WSAIoctl儲存結果的未帶正負號長處。
例如,如果傳入 s 參數的通訊端是資料流程導向 (,則輸入 SOCK_STREAM) , FIONREAD 會傳回可在單一接收作業中讀取的資料總數;這通常與通訊端 (上排入佇列的資料總數相同,因為資料流程是位元組導向的,這不保證) 。
如果傳入 s 參數的通訊端是訊息導向 (,例如,輸入 SOCK_DGRAM) , FIONREAD 會傳回報告可供讀取的位元組總數,而不是通訊端上排入佇列的第一個資料包 () 訊息的大小。
SIOCATMARK
判斷是否已讀取所有 OOB 資料。 這只適用于串流樣式 (的通訊端,例如,輸入已設定為內嵌接收任何 OOB 資料 (SO_OOBINLINE) 的SOCK_STREAM) 。 如果沒有 OOB 資料正在等候讀取,作業會傳回 TRUE。 否則,它會傳回 FALSE,而且在通訊端上執行的下一個接收作業會擷取標記前面的部分或所有資料;應用程式應該使用 SIOCATMARK 作業來判斷是否有任何保留。 如果緊急 (超過訊號範圍) 資料之前有任何一般資料,則會依序接收。 (請注意, recv 作業永遠不會在相同的 call.) lpvOutBuffer 點中混合 OOB 和一般資料, 其中 WSAIoctl 儲存結果的 BOOL。
Windows Sockets 2 命令
支援下列 Windows Sockets 2 命令。
SIO_ACQUIRE_PORT_RESER加值稅ION (opcode 設定:I、T==3)
要求 TCP 或 UDP 埠區塊的執行時間保留。 針對執行時間埠保留,埠集區會要求從授與保留通訊端的進程取用保留。 只有在呼叫 SIO_ACQUIRE_PORT_RESER加值稅ION IOCTL 的通訊端存留期之後,執行時間埠保留才會持續。 相反地,使用 CreatePersistentTcpPortReservation 或 CreatePersistentUdpPortReservation 函式建立的持續性埠保留,可能會由任何能夠取得持續性保留的程式取用。
如需詳細資訊,請參閱 SIO_ACQUIRE_PORT_RESER加值稅ION 參考。
Windows Vista 和更新版本的作業系統支援SIO_ACQUIRE_PORT_RESER加值稅ION。
SIO_ADDRESS_LIST_CHANGE (opcode 設定:V、T==1)
若要在應用程式可系結的通訊端通訊協定系列本機傳輸地址清單中接收變更通知。 完成此 IOCTL 時不會提供任何輸出資訊;完成隻會指出可用的本機地址清單已變更,而且應該透過 SIO_ADDRESS_LIST_QUERY重新查詢。
雖然應用程式在完成SIO_ADDRESS_LIST_CHANGE要求時,會使用重迭的 I/O 通知變更,但 (但並非必要 ) 。 或者,如果在非封鎖通訊端上發出SIO_ADDRESS_LIST_CHANGE IOCTL,而且沒有重迭參數, (lpOverlapped/ lpCompletionRoutine設定為Null) ,則會立即完成錯誤WSAEWOULDBLOCK。 應用程式接著可以透過呼叫 WSAEventSelect 或 WSAAsyncSelect 來等候地址清單變更事件,並在網路事件位元遮罩中設定FD_ADDRESS_LIST_CHANGE位。
SIO_ADDRESS_LIST_QUERY (opcode 設定:O、T==1)
取得應用程式可系結的通訊端通訊協定系列本機傳輸地址清單。 地址清單會根據地址系列而有所不同,有些位址會從清單中排除。
注意
在 Windows 隨插即用環境中,可以動態新增和移除位址。 因此,應用程式無法依賴 SIO_ADDRESS_LIST_QUERY 傳回的資訊,才能持續運作。 應用程式可以透過 SIO_ADDRESS_LIST_CHANGE IOCTL 登入位址變更通知,以透過重迭的 I/O 或FD_ADDRESS_LIST_CHANGE事件提供通知。 下列動作序列可用來保證應用程式一律有目前的通訊清單資訊:
- IOCTL 問題SIO_ADDRESS_LIST_CHANGE
- IOCTL 問題SIO_ADDRESS_LIST_QUERY
- 每當 SIO_ADDRESS_LIST_CHANGE IOCTL 透過重迭的 I/O 或訊號傳送FD_ADDRESS_LIST_CHANGE事件) ,通知地址清單的套用 (變更時,應該重複整個動作序列。
如需詳細資訊,請參閱 SIO_ADDRESS_LIST_QUERY 參考。 Windows 2000 和更新版本支援SIO_ADDRESS_LIST_QUERY。
SIO_APPLY_TRANSPORT_SETTING (opcode 設定:I、T==3)
將傳輸設定套用至通訊端。 套用的傳輸設定是以lpvInBuffer參數中傳遞的TRANSPORT_SETTING_ID為基礎。
目前唯一定義的傳輸設定是 TCP 通訊端上的 REAL_TIME_NOTIFICATION_CAPABILITY 功能。
如果傳遞的TRANSPORT_SETTING_ID已將 Guid成員設定為REAL_TIME_NOTIFICATION_CAPABILITY,則會要求套用與ControlChannelTrigger搭配使用之 TCP 通訊端的即時通知設定,以在 Windows 市集應用程式中接收背景網路通知。
如需詳細資訊,請參閱 SIO_APPLY_TRANSPORT_SETTING 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_APPLY_TRANSPORT_SETTING。
SIO_ASSOCIATE_HANDLE (opcode 設定:I、T==1)
使這個通訊端與隨附介面的指定控制碼產生關聯。 輸入緩衝區包含對應至隨附 (介面資訊清單常數的整數值,例如,TH_NETDEV和 TH_TAPI.) ,後面接著是指定隨附介面控制碼的值,以及任何其他必要資訊。 如需特定隨附介面的特定詳細資料,請參閱 Winsock 附錄 中的適當章節。 總大小會反映在輸入緩衝區長度中。 不需要輸出緩衝區。 WSAENOPROTOOPT錯誤碼會針對不支援此 IOCTL 的服務提供者指出。 您可以使用 SIO_TRANSLATE_HANDLE來擷取這個 IOCTL 相關聯的控制碼。
例如,如果特定提供者提供 (1) 對通訊端行為進行大量額外控制,而且 (2) 控制項的提供者特定程度足以對應到現有的 Windows Socket 函式,或未來可能定義的控制項。 建議您使用元件物件模型 (COM) ,而不是使用此 IOCTL 來探索及追蹤通訊端可能支援的其他介面。 此 IOCTL 適用于 (與 COM 無法使用或因其他原因而無法使用之系統的反向) 相容性。
SIO_ASSOCIATE_PORT_RESER加值稅ION (opcode 設定:I、T==3)
將通訊端與持續性或執行時間保留區建立關聯,以用於埠保留權杖所識別的 TCP 或 UDP 埠區塊。 SIO_ASSOCIATE_PORT_RESER加值稅ION IOCTL 必須在通訊端系結之前發出。 如果和通訊端系結時,指派給它的埠將會從指定權杖所識別的埠保留區中選取。 如果沒有埠可從指定的保留區取得, 系結 函式呼叫將會失敗。
如需詳細資訊,請參閱 SIO_ASSOCIATE_PORT_RESER加值稅ION 參考。
Windows Vista 和更新版本的作業系統支援SIO_ASSOCIATE_PORT_RESER加值稅ION。
SIO_BASE_HANDLE (opcode 設定:O、T==1)
擷取指定通訊端的基底服務提供者控制碼。 傳回的值是 SOCKET。
分層服務提供者永遠不會攔截此 IOCTL,因為傳回值必須是基底服務提供者的通訊端控制碼。
如果輸出緩衝區不足以用於通訊端控制碼, (cbOutBuffer 小於 SOCKET) 的大小,或 lpvOutBuffer 參數是 Null 指標, SOCKET_ERROR 會傳回為這個 IOCTL 的結果, 而 WSAGetLastError 會傳回 WSAEFAULT。
SIO_BASE_HANDLE 定義于 Mswsock.h 標頭檔中,並在 Windows Vista 和更新版本上支援。
SIO_BSP_HANDLE (opcode 設定:O、T==1)
擷取 WSASendMsg 函式所使用的通訊端基底服務提供者控制碼。 傳回的值是 SOCKET。
此 Ioctl 是由分層服務提供者使用,以確保提供者攔截 WSASendMsg 函式 。
如果輸出緩衝區不足以用於通訊端控制碼, (cbOutBuffer 小於 SOCKET) 的大小,或 lpvOutBuffer 參數是 Null 指標, SOCKET_ERROR 會傳回為這個 IOCTL 的結果, 而 WSAGetLastError 會傳回 WSAEFAULT。
SIO_BSP_HANDLE 定義于 Mswsock.h 標頭檔中,並支援 Windows Vista 和更新版本。
SIO_BSP_HANDLE_SELECT (opcode 設定:O、T==1)
擷取 select 函式所使用的通訊端基底服務提供者控制碼。 傳回的值是 SOCKET。
此 Ioctl 是由分層服務提供者使用,以確保提供者攔截 選取 函式。
如果輸出緩衝區不足以用於通訊端控制碼, (cbOutBuffer 小於 SOCKET) 的大小,或 lpvOutBuffer 參數是 Null 指標, SOCKET_ERROR 會傳回為這個 IOCTL 的結果, 而 WSAGetLastError 會傳回 WSAEFAULT。
SIO_BSP_HANDLE_SELECT 定義于 Mswsock.h 標頭檔中,並在 Windows Vista 和更新版本上支援。
SIO_BSP_HANDLE_POLL (opcode 設定:O、T==1)
擷取 WSAPoll 函式所使用的通訊端基底服務提供者控制碼。 lpOverlapped參數必須是Null指標。 傳回的值是 SOCKET。
這個 Ioctl 是由分層服務提供者使用,以確保提供者攔截 WSAPoll 函式。
如果輸出緩衝區對通訊端控制碼不夠大, (cbOutBuffer 小於 SOCKET) 的大小, lpvOutBuffer 參數是 Null 指標,或者 lpOverlapped 參數不是 Null 指標, SOCKET_ERROR 會傳回做為此 IOCTL 的結果, 而 WSAGetLastError 會傳回 WSAEFAULT。
SIO_BSP_HANDLE_POLL 定義于 Mswsock.h 標頭檔中,並在 Windows Vista 和更新版本上支援。
SIO_CHK_QOS (opcode 設定:I、O、T==3)
擷取 QoS 流量特性的相關資訊。 在流程設定與接收 RESV 訊息之間的傳輸階段期間, (請參閱 RSVP 服務如何叫用 TC 以取得轉換階段) 的詳細資訊,與 RSVP 流程相關聯的流量會根據服務類型 (BEST EFFORT、 CONTROLLED LOAD或 GUARANTEED) 來成形。 For more information, see Using SIO_CHK_QOS in the Quality of Service section of the Platform SDK.
SIO_CPU_AFFINITY (opcode 設定:I、T==3)
啟用埠共用和接收指示平行處理。 當您的應用程式使用此通訊端選項將通訊端與不同的處理器產生關聯,然後將通訊端系結至相同的位址時,接收指示會根據接收端調整 (RSS) 雜湊,分散到通訊端。 RSS 設定不會變更,因此任何指定的流程 (本機端點、遠端端點組) 一律會在相同的處理器上指出。 因此,屬於指定流程的所有封包都會向相同的通訊端指出。 系結之前必須呼叫此 IOCTL,否則會傳回 WSAEINVAL。 輸入緩衝區是一種處理器索引, (0 型) USHORT 類型。 IOCTL 與SO_REUSEADDR和SO_REUSE_MULTICASTPORT不相容。 僅支援 UDP 通訊端。
注意
如果您的目標版本為 10.0.19041.0 (Windows 10版本 2004) Windows SDK,請使用 值 0x98000015
,而不是名稱SIO_CPU_AFFINITY。
SIO_ENABLE_CIRCULAR_QUEUEING (opcode 設定:V、T==1)
表示基礎訊息導向服務提供者,因為緩衝區佇列溢位,所以不應該卸載新抵達的訊息。 相反地,應該排除佇列中最舊的訊息,以容納新抵達的訊息。 不需要輸入和輸出緩衝區。 請注意,此 IOCTL 僅適用于與不可靠、訊息導向通訊協定相關聯的通訊端。 WSAENOPROTOOPT錯誤碼會針對不支援此 IOCTL 的服務提供者指出。
SIO_FIND_ROUTE (opcode 設定:O、T==1)
發出時,此 IOCTL 會要求路由傳送至輸入緩衝區中指定為 sockaddr 的遠端位址。 如果位址已存在於本機快取中,則其專案會失效。 在 Novell 的 IPX 案例中,此呼叫會起始 IPX GetLocalTarget (GLT) ,以查詢指定遠端位址的網路。
SIO_FLUSH (opcode 設定:V、T==1)
捨棄與此通訊端相關聯的傳送佇列目前內容。 不需要輸入和輸出緩衝區。 WSAENOPROTOOPT錯誤碼會針對不支援此 IOCTL 的服務提供者指出。
SIO_GET_BROADCAST_ADDRESS (opcode 設定:O、T==1)
此 IOCTL 會將包含適當廣播位址的 sockaddr結構填入輸出緩衝區,以便與sendto/ WSASendTo搭配使用。 IPv6 通訊端不支援此 IOCTL,並傳回 WSAENOPROTOOPT 錯誤碼。
SIO_GET_EXTENSION_FUNCTION_POINTER (opcode 設定:O、I、T==1)
擷取相關聯服務提供者所支援之指定擴充函式的指標。 輸入緩衝區包含全域唯一識別碼 (GUID) ,其值可識別有問題的擴充函式。 所需的函式指標會在輸出緩衝區中傳回。 擴充功能函式識別碼是由服務提供者廠商所建立,而且應該包含在描述擴充功能功能和語意的廠商檔中。
Windows TCP/IP 服務提供者支援的擴充函式 GUID 值定義在 Mswsock.h 標頭檔中。 這些 GUID 的可能值如下所示:
詞彙 | 描述 |
---|---|
WSAID_ACCEPTEX |
AcceptEx延伸模組函式。 |
WSAID_CONNECTEX |
ConnectEx延伸模組函式。 |
WSAID_DISCONNECTEX |
DisconnectEx擴充功能函式。 |
WSAID_GETACCEPTEXSOCKADDRS |
GetAcceptExSockaddrs擴充功能函式。 |
WSAID_TRANSMITFILE |
TransmitFile延伸模組函式。 |
WSAID_TRANSMITPACKETS |
TransmitPackets擴充功能函式。 |
WSAID_WSARECVMSG |
LPFN_WSARECVMSG (WSARecvMsg) 擴充功能函式。 |
WSAID_WSASENDMSG |
WSASendMsg擴充功能函式。 |
SIO_GET_GROUP_QOS (opcode 設定:O、I、T==1)
保留供未來搭配通訊端使用。
擷取與這個通訊端所屬之通訊端群組相關聯的 QOS 結構。 輸入緩衝區是選擇性的。 例如,某些通訊協定 (RSVP) 允許輸入緩衝區用來限定服務需求品質。 QOS結構將會複製到輸出緩衝區。 如果這個通訊端不屬於適當的通訊端群組,傳回QOS結構的SendingFlowspec和ReceivingFlowspec成員會設定為Null。 針對不支援服務品質的服務提供者,會指出 WSAENOPROTOOPT 錯誤碼。
SIO_GET_INTERFACE_LIST (opcode 設定:O、T==0)
傳回已設定 IP 介面及其參數的清單,做為 INTERFACE_INFO 結構的陣列。
注意
Windows Sockets 2 相容 TCP/IP 服務提供者必須支援此命令。
lpvOutBuffer參數會指向緩衝區,以將介面的相關資訊儲存為介面上單播 IP 位址的INTERFACE_INFO結構陣列。 cbOutBuffer參數會指定輸出緩衝區的長度。 傳回的介面數目 (lpvOutBuffer 參數所指向之緩衝區中所傳回的結構數目,) 可以根據 lcpBytesReturned 參數所傳回輸出緩衝區的實際長度來決定。
如果使用SIO_GET_INTERFACE_LIST呼叫WSAIoctl函式,而且通訊端s參數的層級成員未定義為IPPROTO_IP,則會傳回WSAEINVAL。 如果指定輸出緩衝區長度的cbOutBuffer參數太小,則呼叫具有 SIO_GET_INTERFACE_LIST的WSAEFAULT函式會傳回WSAEFAULT。
Windows Me/98 和 Windows NT 4.0 SP4 和更新版本支援SIO_GET_INTERFACE_LIST。
SIO_GET_INTERFACE_LIST_EX (opcode 設定:O、T==0)
保留供未來搭配通訊端使用。
傳回已設定 IP 介面及其參數的清單,做為 INTERFACE_INFO_EX 結構的陣列。
lpvOutBuffer參數會指向緩衝區,以將介面的相關資訊儲存為介面上單播 IP 位址的INTERFACE_INFO_EX結構陣列。 cbOutBuffer參數會指定輸出緩衝區的長度。 傳回的介面數目 (lpvOutBuffer) 中傳回的結構數目,可以根據 lcpBytesReturned 參數中傳回之輸出緩衝區的實際長度來決定。
Windows 目前不支援SIO_GET_INTERFACE_LIST_EX。
SIO_GET_QOS (opcode 設定:O、T==1)
保留供未來搭配通訊端使用。 擷取與通訊端相關聯的 QOS 結構。 輸入緩衝區是選擇性的。 例如,某些通訊協定 (RSVP) 允許輸入緩衝區用來限定服務需求品質。 QOS結構將會複製到輸出緩衝區。 輸出緩衝區的大小必須夠大,才能包含完整的 QOS 結構。 針對不支援服務品質的服務提供者,會指出 WSAENOPROTOOPT 錯誤碼。
在通訊端連線之前,傳送者可能不會呼叫 SIO_GET_QOS 。
接收者可能會在系 結時立即呼叫SIO_GET_QOS 。
SIO_GET_TX_TIMESTAMP
通訊端 IOCTL,用來取得傳輸 (TX) 封包的時間戳記。 僅適用于資料包通訊端。
SIO_GET_TX_TIMESTAMP控制程式代碼會從通訊端的傳輸時間戳記佇列中移除傳輸時間戳記。 先使用 SIO_TIMESTAMPING 通訊端 IOCTL 來啟用時間戳記接收。 然後使用下列參數呼叫 WSAIoctl (或 WSPIoctl) 函式,依識別碼擷取 tx 時間戳記。
針對 SIO_GET_TX_TIMESTAMP,輸入為 UINT32 時間戳記識別碼,而輸出為 UINT64 時間戳記值。 成功時,tx 時間戳記可供使用,並傳回。 如果沒有可用的傳輸時間戳記, 則 WSAGetLastError 會傳回 WSAEWOULDBLOCK。
注意
透過 UDP_SEND_MSG_SIZE進行聯合傳送時,不支援 TX 時間戳記。
另請參閱 Winsock 時間戳記。
SIO_IDEAL_SEND_BACKLOG_CHANGE (opcode 設定:V、T==0)
當理想的傳送待辦專案 (ISB) 值變更基礎連線時,通知應用程式。
使用 Windows 通訊端透過 TCP 連線傳送資料時,請務必保留足夠的未處理資料量 (傳送,但尚未認可為 TCP) ,才能達到最高的輸送量。 達到 TCP 連線最佳輸送量之未處理資料量的理想值,稱為理想的傳送待辦專案 (ISB) 大小。 ISB 值是 TCP 連線頻寬延遲產品的函式,以及接收者公告的接收視窗 (,以及部分網路) 的壅塞量。
每個連線的 ISB 值可從 Windows Server 2008、Windows Vista SP1 和更新版本的作業系統中的 TCP 通訊協定實作取得。 當 ISB 值動態變更連線時,應用程式可以使用 SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL 來取得通知。
如需詳細資訊,請參閱 SIO_IDEAL_SEND_BACKLOG_CHANGE 參考。
Windows Server 2008、Windows Vista SP1 和更新版本的作業系統支援SIO_IDEAL_SEND_BACKLOG_CHANGE。
SIO_IDEAL_SEND_BACKLOG_QUERY (opcode 設定:O、T==0)
擷取基礎連線的理想傳送待辦專案 (ISB) 值。
使用 Windows 通訊端透過 TCP 連線傳送資料時,請務必保留足夠的未處理資料量 (傳送,但尚未認可為 TCP) ,才能達到最高的輸送量。 達到 TCP 連線最佳輸送量之未處理資料量的理想值,稱為理想的傳送待辦專案 (ISB) 大小。 ISB 值是 TCP 連線頻寬延遲產品的函式,以及接收者公告的接收視窗 (,以及部分網路) 的壅塞量。
每個連線的 ISB 值可從 Windows Server 2008 和更新版本的 TCP 通訊協定實作取得。 應用程式可以使用 SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL 來查詢連線的 ISB 值。
如需詳細資訊,請參閱 SIO_IDEAL_SEND_BACKLOG_QUERY 參考。
Windows Server 2008、Windows Vista SP1 和更新版本的作業系統都支援SIO_IDEAL_SEND_BACKLOG_QUERY。
SIO_KEEPALIVE_VALS (opcode 設定:I、T==3)
啟用或停用 TCP keep-alive 選項的個別連線設定,指定 TCP 保持運作逾時和間隔。 如需 keep-alive 選項的詳細資訊,請參閱IETF 網站上RFC 1122 中指定的通訊層需求一節 4.2.3.6。 (此資源只能以英文提供。)
SIO_KEEPALIVE_VALS 可用來啟用或停用保持連線探查,並設定 keep-alive 逾時和間隔。 keep-alive 逾時會指定逾時,以毫秒為單位,直到傳送第一個保持運作封包為止,沒有活動。 keep-alive 間隔會指定在未收到通知時,在連續的保持運作封包之間,以毫秒為單位來指定間隔。
SO_KEEPALIVE選項是其中一個SOL_SOCKET通訊端選項,也可用來啟用或停用連線上的 TCP 保持運作,以及查詢此選項的目前狀態。 若要查詢通訊端上是否啟用 TCP 保持運作,可以使用SO_KEEPALIVE選項呼叫getsockopt函式。 若要啟用或停用 TCP 保持運作,可以使用SO_KEEPALIVE選項呼叫setsockopt函式。 如果 tcp keep-alive 已啟用 SO_KEEPALIVE,則預設 TCP 設定會用於保持運作逾時和間隔,除非這些值已使用 SIO_KEEPALIVE_VALS進行變更。
如需詳細資訊,請參閱 SIO_KEEPALIVE_VALS 參考。 Windows 2000 和更新版本支援SIO_KEEPALIVE_VALS。
SIO_LOOPBACK_FAST_PATH (opcode 設定:I、T==3)
設定 TCP 通訊端,以降低延遲和更快速的回送介面作業。 此 IOCTL 要求 TCP/IP 堆疊使用此通訊端上回送作業的特殊快速路徑。 SIO_LOOPBACK_FAST_PATH IOCTL 只能與 TCP 通訊端搭配使用。 這個 IOCTL 必須在回送會話的兩端使用。 支援使用 IPv4 或 IPv6 回送介面的 TCP 回送快速路徑。 預設會停用 SIO_LOOPBACK_FAST_PATH 。
如需詳細資訊,請參閱 SIO_LOOPBACK_FAST_PATH 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_LOOPBACK_FAST_PATH。
SIO_MULTIPOINT_LOOPBACK (opcode 設定:V、T==1)
控制本機電腦上應用程式傳送的資料, (不一定由多播會話中的相同通訊端) 接收,通訊端是否會在回送介面上聯結至多播目的地群組。 TRUE值會導致本機電腦上的應用程式傳送多播資料,以傳遞至回送介面上的接聽通訊端。 FALSE值可防止本機電腦上的應用程式傳送多播資料傳送到回送介面上的接聽通訊端。 預設會啟用 SIO_MULTIPOINT_LOOPBACK 。
SIO_MULTICAST_SCOPE (opcode 設定:I、 T==1)
指定多播傳輸發生的範圍。 範圍定義為要涵蓋的路由網路區段數目。 零的範圍表示多播傳輸不會放在網路上,但可能會在本機主機內的通訊端上受到感染。 一個範圍值 (預設) 表示傳輸會放線上路上,但不會跨越任何路由器。 較高的範圍值會決定可以交叉的路由器數目。 請注意,這會對應到 IP 多播中的存留時間 (TTL) 參數。 根據預設,範圍是 1。
SIO_QUERY_RSS_PROCESSOR_INFO (opcode 設定:O、T==1)
查詢通訊端與 RSS 處理器核心與 NUMA 節點之間的關聯。
SIO_QUERY_RSS_PROCESSOR_INFO IOCTL 會傳回包含PROCESSOR_NUMBER和 NUMA 節點識別碼的SOCKET_PROCESSOR_AFFINITY結構。 傳回 的 PROCESSOR_NUMBER 結構包含群組內的組號和相對處理器編號。
如需詳細資訊,請參閱 SIO_QUERY_RSS_PROCESSOR_INFO 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_QUERY_RSS_PROCESSOR_INFO。
SIO_QUERY_RSS_SCALABILITY_INFO (opcode 設定:O、T==3)
查詢卸載接收端調整 (RSS) 功能的介面。 針對SIO_QUERY_RSS_SCALABILITY_INFO傳回的引數結構是在Mstcpip.h標頭檔中定義的RSS_SCALABILITY_INFO結構中指定。 此結構的定義如下:
// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
RssEnabled成員中傳回的值指出是否在至少一個介面上啟用 RSS。
如果輸出緩衝區不足以用於 RSS_SCALABILITY_INFO結構, (cbOutBuffer 小於 RSS_SCALABILITY_INFO) 的大小,或 lpvOutBuffer 參數為 Null 指標, SOCKET_ERROR 會傳回為此 IOCTL 的結果,而 WSAGetLastError 會傳回 WSAEINVAL。
在多個 CPU 位於單一系統內的高速網路中,網路通訊協定堆疊在多 CPU 系統上的延展能力會受到禁止,因為 NDIS 5.1 和舊版的架構會將接收通訊協定處理限制為單一 CPU。 接收端調整 (RSS) 可讓網路介面卡的網路負載在多個 CPU 之間平衡,來解決此問題。
Windows Vista 和更新版本支援SIO_QUERY_RSS_SCALABILITY_INFO。
SIO_QUERY_TRANSPORT_SETTING (opcode 設定:I、T==3)
查詢通訊端上的傳輸設定。 要查詢的傳輸設定是以lpvInBuffer參數中傳遞TRANSPORT_SETTING_ID為基礎。
目前唯一定義的傳輸設定是 TCP 通訊端上的 REAL_TIME_NOTIFICATION_CAPABILITY 功能。
如果 TRANSPORT_SETTING_IDGuid 成員設定為 REAL_TIME_NOTIFICATION_CAPABILITY,則這是查詢與 ControlChannelTrigger 搭配使用 之 TCP 通訊端的即時通知設定,以在 Windows 市集應用程式中接收背景網路通知的要求。 如果 WSAIoctl 或 WSPIoctl 呼叫成功,此 IOCTL 會傳回具有目前狀態 的REAL_TIME_NOTIFICATION_SETTING_OUTPUT 結構。
如需詳細資訊,請參閱 SIO_QUERY_TRANSPORT_SETTING 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_QUERY_TRANSPORT_SETTING。
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (opcode 設定:O、T==3)
查詢 ALE) 端點控制碼 (應用層強制執行。
Windows 篩選平台 () 支援網路流量檢查和修改。 在 Windows Vista 上,此專案著重于主機電腦是通訊端點的案例。 不過,在 Windows Server 2008 上,有一個邊緣防火牆實作會想要利用一個一般平臺來檢查和 Proxy 傳遞流量。 INTERNET Security and Acceleration (ISA) 伺服器是這類邊緣裝置的範例。
有些防火牆案例可能需要將輸入封包插入現有端點相關聯的傳送路徑。 需要有一個機制,才能探索與目的地端點相關聯的傳輸層端點控制碼。 建立端點的應用程式擁有這些傳輸層端點。 這個 IOCTL 可用來提供通訊端控制碼給傳輸層端點控制碼對應。
如果輸出緩衝區不足以用於端點控制碼, (cbOutBuffer 小於 UINT64) 的大小,或 lpvOutBuffer 參數是 Null 指標, SOCKET_ERROR 會傳回為此 IOCTL 的結果,而 WSAGetLastError 會傳回 WSAEINVAL。
Windows Vista 和更新版本支援SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (opcode 設定:I、T==3)
查詢 Windows 篩選平台 () 重新導向服務所使用之重新導向記錄的重新導向內容。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL 可用來提供重新導向通訊端連線的 Proxy 連線追蹤。 此一個「儲存機制」功能可協助追蹤從連線的初始重新導向到目的地最終連線的重新導向記錄。
如需詳細資訊,請參閱 SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (opcode 設定:I、T==3)
查詢接受 TCP/IP 連線的重新導向記錄,以供 Windows 篩選平台 () 重新導向服務使用。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL 可用來提供重新導向通訊端連線的 Proxy 連線追蹤。 此一個「儲存機制」功能可協助追蹤從連線的初始重新導向到目的地最終連線的重新導向記錄。
如需詳細資訊,請參閱 SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS。
SIO_RCVALL (opcode 設定:I、T==3)
讓通訊端接收所有傳遞網路介面的 IPv4 或 IPv6 封包。 傳遞至 WSAIoctl 函式的通訊端控制碼必須是下列其中一項:
- 建立的 IPv4 通訊端,位址系列設定為 AF_INET、通訊端類型設定為 SOCK_RAW,並將通訊協定設定為 IPPROTO_IP。
- 建立的 IPv6 通訊端,位址系列設定為 AF_INET6、通訊端類型設定為 SOCK_RAW,並將通訊協定設定為 IPPROTO_IPV6。
通訊端也必須系結至明確的本機 IPv4 或 IPv6 介面,這表示您無法系結至 INADDR_ANY 或 in6addr_any。
在 Windows Server 2008 和更早版本上, SIO_RCVALL IOCTL 設定不會擷取從網路介面傳送的本機封包。 這包括在另一個介面上收到的封包,並轉送出為 SIO_RCVALL IOCTL 指定的網路介面。
在 Windows 7 和 Windows Server 2008 R2 上,這已變更,因此也會擷取從網路介面傳送的本機封包。 這包括在另一個介面上收到的封包,然後將系結至通訊端的網路介面轉送給 具有 IOCTL SIO_RCVALL 。
設定此 IOCTL 需要本機電腦上的系統管理員許可權。
這項功能有時稱為「不對稱」模式。
SIO_RCVALL IOCTL 選項的可能值是在Mstcpip.h標頭檔中定義的RCVALL_VALUE列舉中指定。 SIO_RCVALL的可能值如下所示:
詞彙 | 描述 |
---|---|
RCVALL_OFF |
停用此選項,讓通訊端不會接收網路上的所有 IPv4 或 IPv6 封包。 |
RCVALL_ON |
啟用此選項,讓通訊端接收網路上的所有 IPv4 或 IPv6 封包。 如果 NIC 支援交集模式,此選項會在網路介面卡上啟用 NIC (NIC) 。 在具有網路中樞的 LAN 區段上,支援交集模式的 NIC 會擷取 LAN 上的所有 IPv4 或 IPv6 流量,包括相同 LAN 區段上其他電腦之間的流量。 根據通訊端) ,所有擷取的封包 (IPv4 或 IPv6 都會傳遞至原始通訊端。 此選項不會擷取 (ARP、IPX 和 NetBEUI 封包的其他封包,例如介面上的) 。 Netmon 會針對網路介面使用相同的模式,但不會使用此選項來擷取流量。 |
RCVALL_SOCKETLEVELONLY |
這項功能目前並未實作,因此設定此選項並不會影響任何影響。 |
RCVALL_IPLEVEL |
啟用此選項,讓 IPv4 或 IPv6 通訊端在網路上的 IP 層級接收所有封包。 此選項不會在網路介面卡上啟用非交集模式。 此選項只會影響 IP 層級的封包處理。 NIC 仍然只會接收導向至其設定的單播和多播位址的封包。 不過,啟用此選項的通訊端不僅會收到導向至特定 IP 位址的封包,也會接收 NIC 接收的所有 IPv4 或 IPv6 封包。 此選項不會擷取 ARP、IPX 和 NetBEUI 封包 (其他封包,例如介面上收到的) 。 |
如需詳細資訊,請參閱 SIO_RCVALL 參考。
Windows 2000 和更新版本支援SIO_RCVALL。
SIO_RCVALL_IGMPMCAST (opcode 設定:I、T==3)
可讓通訊端接收網路上的所有 IGMP 多播 IP 流量,而不需要接收其他多播 IP 流量。 傳遞至 WSAIoctl 函式的通訊端控制碼必須是AF_INET位址系列、SOCK_RAW通訊端類型和IPPROTO_IGMP通訊協定。 通訊端也必須系結至明確的本機介面,這表示您無法系結至INADDR_ANY。
一旦系結通訊端並設定 IOCTL,對 WSARecv 或 recv 函式的呼叫會傳回透過指定介面傳遞的多播 IP 資料包。 請注意,您必須提供夠大的緩衝區。 設定此 IOCTL 需要本機電腦上的系統管理員許可權。
Windows 2000 和更新版本支援SIO_RCVALL_IGMPMCAST。
SIO_RCVALL_MCAST (opcode 設定:I、 T==3)
讓通訊端在網路上接收所有多播 IP 流量 (也就是說,所有以 IP 位址為目標的 IP 封包,範圍介於 224.0.0.0 到 239.255.255.255.255) 。 傳遞至 WSAIoctl 函式的通訊端控制碼必須是AF_INET位址系列、SOCK_RAW通訊端類型和IPPROTO_UDP通訊協定。 通訊端也必須系結至明確的本機介面,這表示您無法系結至INADDR_ANY。 通訊端應該系結至埠零。
系結通訊端並設定 IOCTL 之後,呼叫 WSARecv 或 recv 函式會傳回透過指定介面傳遞的多播 IP 資料包。 請注意,您必須提供夠大的緩衝區。 設定此 IOCTL 需要本機電腦上的系統管理員許可權。
Windows 2000 和更新版本支援SIO_RCVALL_MCAST。
SIO_RELEASE_PORT_RESER加值稅ION (opcode 設定:I、T==3)
釋放 TCP 或 UDP 埠區塊的執行時間保留。 必須使用 SIO_ACQUIRE_PORT_RESER加值稅ION IOCTL,從發行程式取得要釋放 的 執行時間保留。
如需詳細資訊,請參閱 SIO_RELEASE_PORT_RESER加值稅ION 參考。
Windows Vista 和更新版本的作業系統支援SIO_RELEASE_PORT_RESER加值稅ION。
SIO_ROUTING_INTERFACE_CHANGE (opcode 設定:I、T==1)
若要接收路由介面變更的通知,該變更應該用來連線輸入緩衝區中的遠端位址, (指定為 sockaddr 結構) 。 完成此 IOCTL 時,不會提供新路由介面的輸出資訊;完成隻會指出指定目的地的路由介面已變更,而且應該使用 SIO_ROUTING_INTERFACE_QUERY IOCTL 進行查詢。
雖然並非必要,但應用程式會使用重迭的 I/O,透過完成 SIO_ROUTING_INTERFACE_CHANGE 要求,通知路由介面變更。 或者,如果在非封鎖通訊端上發出 SIO_ROUTING_INTERFACE_CHANGE IOCTL,並將 lpOverlapped 和 lpCompletionRoutine 參數設定為 Null) ,則會立即傳回 WSAEWOULDBLOCK 做為錯誤,然後應用程式可以透過呼叫 WSAEventSelect 或 WSAAsyncSelect 來等候路由變更事件,並在網路事件位元遮罩中設定FD_ROUTING_INTERFACE_CHANGE位。
在大部分情況下,路由資訊會保持穩定,因此要求應用程式保留多個未完成的 IOCTL,以取得其感興趣的所有目的地通知,以及讓服務提供者追蹤這些通知要求將會使用大量的系統資源。 您可以擴充輸入參數的意義並放寬服務提供者需求,以避免這種情況,如下所示:
- 當要求系結至任何可用的位址時,應用程式可以指定通訊協定系列特定的萬用字元位址 (與系 結 呼叫中使用的位址相同,) 要求任何路由變更的通知。 這可讓應用程式針對它擁有的所有通訊端和目的地只保留一個未完成 的SIO_ROUTING_INTERFACE_CHANGE ,然後使用 SIO_ROUTING_INTERFACE_QUERY 來取得實際的路由資訊。
- 服務提供者可以選擇忽略應用程式在 SIO_ROUTING_INTERFACE_CHANGE 輸入緩衝區中指定的資訊 (,就像應用程式指定萬用字元位址) ,並在發生任何路由資訊變更時完成 SIO_ROUTING_INTERFACE_CHANGE IOCTL 或訊號FD_ROUTING_INTERFACE_CHANGE事件, (不只是輸入緩衝區中指定的目的地路由) 。
SIO_ROUTING_INTERFACE_QUERY (opcode 設定:I、O、T==1)
若要取得本機介面的位址, (表示為 sockaddr 結構) ,這應該用來傳送至輸入緩衝區中指定的遠端位址, (為 sockaddr) 。 遠端多播位址可能會在輸入緩衝區中提交,以取得多播傳輸慣用介面的位址。 在任何情況下,應用程式可以在後續系結 () 要求中使用傳回的介面位址。
請注意,路由可能會變更。 因此,應用程式無法依賴 SIO_ROUTING_INTERFACE_QUERY 傳回的資訊,才能持續運作。 應用程式可以透過 SIO_ROUTING_INTERFACE_CHANGE IOCTL 註冊路由變更通知,以透過重迭的 I/O 或FD_ROUTING_INTERFACE_CHANGE事件來提供通知。 下列動作序列可用來保證應用程式一律具有指定目的地的目前路由介面資訊:
- IOCTL SIO_ROUTING_INTERFACE_CHANGE 問題
- IOCTL SIO_ROUTING_INTERFACE_QUERY 問題
- 每當 SIO_ROUTING_INTERFACE_CHANGE IOCTL 透過重迭的 I/O 或訊號傳送FD_ROUTING_INTERFACE_CHANGE事件) 來通知路由 (變更的應用程式時,應該重複整個動作序列。
如果輸出緩衝區太大而無法包含介面位址,SOCKET_ERROR會傳回此 IOCTL 的結果,而 WSAGetLastError 會傳回 WSAEFAULT。 在此案例中,輸出緩衝區的必要大小將會以 lmicrosoftBytesReturned 傳 回。 請注意,如果lpvInBuffer、lpvOutBuffer或lBytesReturned參數未完全包含在使用者位址空間的有效部分,也會傳回 WSAEFAULT 錯誤碼。
如果輸入緩衝區中指定的目的地位址無法透過任何可用的介面連線,SOCKET_ERROR會因為這個 IOCTL 而 WSAGetLastError 傳回 WSAENETUNREACH 或 甚至 WSAENETDOWN ,否則會遺失所有網路連線。
SIO_SET_COMPATIBILITY_MODE (opcode 設定:I、T==3)
要求網路堆疊如何處理特定行為,其中處理行為的預設方式可能會因 Windows 版本而異。 SIO_SET_COMPATIBILITY_MODE的引數結構是在Mswsockdef.h標頭檔中定義的WSA_COMPATIBILITY_MODE結構中指定。 此結構的定義如下:
/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;
BehaviorId成員中指定的值會指出要求的行為。 TargetOsVersion成員中指定的值表示要求行為的 Windows 版本。
BehaviorId成員可以是mswsockdef.h標頭檔中所定義之WSA_COMPATIBILITY_BEHAVIOR_ID列舉類型的其中一個值。 BehaviorId成員的可能值如下所示。
詞彙 | 描述 |
---|---|
WsaBehaviorAll |
這相當於要求針對 WSA_COMPATIBILITY_BEHAVIOR_ID定義的所有可能相容行為。 |
WsaBehaviorReceiveBuffering |
當 TargetOsVersion 成員設定為 Windows Vista 或更新版本的值時,即使已建立 TCP 連線之後,仍允許使用此通訊端上的 TCP 接收緩衝區大小縮減 SO_RCVBUF 通訊端選項。 當 TargetOsVersion 成員設定為早于 Windows Vista 的值時,在連線建立之後,不允許使用 [SO_RCVBUF 通訊端] 選項減少此通訊端上的 TCP 接收緩衝區大小。 |
WsaBehaviorAutoTuning |
當 TargetOsVersion 成員設定為 Windows Vista 或更新版本的值時,會啟用接收視窗自動調整,並將 TCP 視窗縮放比例從預設值 8 縮減為 2。 當 TargetOsVersion 設定為早于 Windows Vista 的值時,會停用接收視窗自動調整。 TCP 視窗調整選項也會停用,而真正的接收視窗大小上限限制為 65,535 個位元組。 即使在此通訊端上呼叫 SO_RCVBUF 通訊端選項,指定連線之前大於 65,535 個位元組的值,也無法在連線上交涉 TCP 視窗調整選項。 |
如需詳細資訊,請參閱 SIO_SET_COMPATIBILITY_MODE 參考。
Windows Vista 和更新版本支援SIO_SET_COMPATIBILITY_MODE。
SIO_SET_GROUP_QOS (opcode 設定:I、T==1)
保留的。
SIO_SET_PRIORITY_HINT (opcode 設定:I、T==3)
提供基礎傳輸通訊協定的提示,以以特定優先順序處理此通訊端上的流量。 lpvInBuffer必須指向類型為 PRIORITY_HINT的變數,並將 cbInBuffer設定為 sizeof (PRIORITY_HINT) 。 lpvOutBuffer和cbOutBuffer參數必須分別為Null和 0。 Microsoft Windows TCP 實作支援此 IOCTL,從 Windows 10 版本 1809 (10.0 開始;組建 17763) 及更新版本,如下所示:當要求的優先順序值設定為IoPriorityHintVeryLow時,TCP 會使用 RFC 6817) 中定義的已修改版 LEDBAT 演算法 (,以控制通訊端上的輸出流量速率。 此 IOCTL 不會影響輸入流量。 LEDBAT 是一種攻擊程式演算法,其目標是讓延遲保持低,並避免在一般優先順序流量出現時,對一般優先順序流量造成任何負面影響。
另請參閱 RFC 6817。
Windows 10 版本 1809 ( 10.0 支援SIO_SET_PRIORITY_HINT;組建 17763) 和更新版本。
SIO_SET_QOS (opcode 設定:I、T==1)
將指定的 QOS 結構與通訊端產生關聯。 不需要輸出緩衝區,會從輸入緩衝區取得 QOS 結構。 WSAENOPROTOOPT錯誤碼會針對不支援服務品質的服務提供者指出。
SIO_TCP_INITIAL_RTO (opcode 設定:I、T==3)
藉由設定初始重新傳輸逾時 (RTO) 參數,控制 TCP 通訊端的初始 (SYN/ SYN+ACK) 重新傳輸特性。 組態參數是在 TCP_INITIAL_RTO_PARAMETERS 結構中指定。
如需詳細資訊,請參閱 SIO_TCP_INITIAL_RTO 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_TCP_INITIAL_RTO。
SIO_TIMESTAMPING
通訊端 IOCTL,用來設定通訊端傳輸/接收時間戳記的接收。 僅適用于資料包通訊端。 SIO_TIMESTAMPING的輸入類型是TIMESTAMPING_CONFIG結構。
另請參閱 Winsock 時間戳記。
SIO_TRANSLATE_HANDLE (opcode 設定:I、O、T==1)
若要 取得在隨附 (介面內容中有效的通訊端對應控制碼,例如,TH_NETDEV和TH_TAPI) 。 在輸入緩衝區中會指定識別隨附介面以及任何其他必要參數的資訊清單常數。 完成此函式時,輸出緩衝區中將會提供對應的控制碼。 如需特定隨附介面的特定詳細資料,請參閱 Winsock 附錄 中的適當章節。 WSAENOPROTOOPT錯誤碼會針對不支援指定隨附介面的這個 IOCTL 服務提供者指出。 此 IOCTL 會擷取使用 SIO_TRANSLATE_HANDLE相關聯的控制碼。
建議您使用元件物件模型 (COM) ,而不是使用此 IOCTL 來探索及追蹤通訊端可能支援的其他介面。 此 IOCTL 與 COM 無法使用或因其他原因而無法使用的系統有回溯相容性。
SIO_UDP_CONNRESET (opcode 設定:I、T==3)
Windowsxp: 控制是否報告 UDP PORT_UNREACHABLE訊息。 設定為 TRUE 以啟用報告。 設定為 FALSE 以停用報告。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (opcode 設定:I、T==3)
將重新導向記錄設定為連線到最終目的地的新 TCP 通訊端,以供 Windows 篩選平台 (一個) 重新導向服務使用。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL 是重新導向通訊端連線上 Proxy 連線追蹤的一部分。 此「計畫」功能可協助追蹤從連線的初始重新導向到目的地最終連線的重新導向記錄。
如需詳細資訊,請參閱 SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS 參考。 Windows 8、Windows Server 2012及更新版本支援SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS。
SIO_TCP_INFO (opcode 設定:I、O、T==3)
擷取通訊端的 TCP 統計資料。 TCP 統計資料是在 TCP_INFO_v0 結構中提供。
不同于使用 GetPerTcpConnectionEStats 函式擷取 TCP 統計資料,使用此控制程式代碼擷取 TCP 統計資料不需要使用者程式碼載入、儲存及篩選 TCP 連線資料表,而且不需要提高的許可權才能使用。
如需詳細資訊,請參閱 SIO_TCP_INFO。 Windows 10版本 1703、Windows Server 2016及更新版本支援SIO_TCP_INFO。
備註
Winsock Ioctls 定義于許多不同的標頭檔。 其中包括 Winsock2.h、 Mswsock.h和 Mstcpip.h 標頭檔。
在針對 Windows Vista 和更新版本發行的 Microsoft Windows 軟體發展工具組 (SDK) 上,標頭檔的組織已變更,而且 Ws2def.h、 Ws2ipdef.h和 Mswsockdef.h 標頭檔中也會定義一些 Winsock Ioctls。 Winsock2.h標頭檔會自動包含Ws2def.h標頭檔。 Ws2ipdef.h標頭檔會自動包含在Ws2tcpip.h標頭檔內。 Mswsockdef.h標頭檔會自動包含在Mswsockdef.h標頭檔中。
規格需求
需求 | 值 |
---|---|
標頭 |
|