本節說明各種 Windows作系統版本的 Winsock Socket 輸入/輸出控件 (IOCTLs)。 使用 WSAIoctl 或 WSPIoctl 函式發出 Winsock IOCTL 來控制套接字、傳輸通訊協定或通訊子系統的模式。
某些 Winsock IOCTLs 需要比下表所能傳達更多的說明;這類選項包含其他主題的連結。
可以採用編碼配置,以保留目前定義的 ioctlsocket opcode,同時提供方便的方式,將 opcode 標識符空間分割成 與 dwIoControlCode 參數一樣多,現在是 32 位實體。 dwIoControlCode 參數是針對新增控件程式代碼時允許通訊協定和廠商獨立,同時保留與 Windows Sockets 1.1 和 Unix 控件碼的回溯相容性。 dwIoControlCode 參數的格式如下。
我 | 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 參數指向不帶正負號的 long (QoS),如果啟用非封鎖模式,則為非零,如果停用則為零。 建立套接字時,它會以封鎖模式運作(也就是停用非封鎖模式)。 這與 BSD 套接字一致。
WSAAsyncSelect 或 WSAEventSelect 例程會自動將套接字設定為非封鎖模式。 如果套接字上發出 WSAAsyncSelect 或 WSAEventSelect ,則任何使用 WSAIoctl 將套接字設定回封鎖模式的嘗試都會失敗,WSAEINVAL。 若要將套接字設定回封鎖模式,應用程式必須先藉由呼叫 lEvent 參數等於零的 WSAAsyncSelect 來停用 WSAAsyncSelect,或藉由呼叫 lNetworkEvents 參數等於零的 WSAEventSelect 來停用 WSAEventSelect。
FIONREAD
判斷可從套接字 以不可部分完成方式讀取的數據量。 lpvOutBuffer 參數會指向 WSAIoctl 儲存結果的不帶正負號長。
如果傳入 s 參數的套接字是數據流導向的(例如,類型SOCK_STREAM), FIONREAD 會傳回可在單一接收作業中讀取的數據總數;這通常與套接字上排入佇列的數據總量相同(因為數據流是位元組導向的,因此不保證)。
如果傳入 s 參數的套接字是訊息導向的(例如,類型SOCK_DGRAM), FIONREAD 會傳回報告可供讀取的位元組總數,而不是套接字上排入佇列的第一個數據報 (message) 的大小。
SIOCATMARK
判斷是否已讀取所有 OOB 數據。 這隻適用於已針對任何 OOB 資料內嵌接收所設定的數據流樣式套接字(例如,類型 SO_OOBINLINE SOCK_STREAM)。 如果沒有 OOB 數據正在等候讀取,作業會傳回 TRUE。 否則,它會傳回 FALSE,而套接字上執行的下一個接收作業將會擷取標記之前的部分或所有數據;應用程式應該使用 SIOCATMARK 作業來判斷是否有任何保留。 如果緊急(頻外)數據之前有任何一般數據,則會依序接收。 (請注意, recv 作業永遠不會在相同的呼叫中混合 OOB 和一般數據。 lpvOutBuffer 指向 WSAIoctl 儲存結果的 BOOL。
Windows Sockets 2 命令
支援下列 Windows Sockets 2 命令。
SIO_ACQUIRE_PORT_RESERVATION (opcode 設定: I, T==3)
要求 TCP 或 UDP 連接埠區塊的運行時間保留。 針對運行時間埠保留,埠集區會要求從已授與保留套接字的進程取用保留。 運行時間埠保留只會持續到呼叫 SIO_ACQUIRE_PORT_RESERVATION IOCTL 的套接字存留期。 相反地,使用 CreatePersistentTcpPortReservation 或 CreatePersistentUdpPortReservation 函式所建立的持續埠保留,可能會由任何能夠取得持續性保留的程式取用。
如需詳細資訊,請參閱 SIO_ACQUIRE_PORT_RESERVATION 參考。
Windows Vista 和更新版本的作系統支援SIO_ACQUIRE_PORT_RESERVATION。
SIO_ADDRESS_LIST_CHANGE (opcode 設定: V, T==1)
若要接收應用程式可以系結之套接字通訊協定系列之本機傳輸位址清單中變更的通知。 完成此 IOCTL 時,將不會提供任何輸出資訊;完成只是表示可用的本機位址清單已變更,而且應該透過 SIO_ADDRESS_LIST_QUERY再次查詢。
假設應用程式會使用重疊的 I/O,藉由完成 SIO_ADDRESS_LIST_CHANGE 要求來通知變更。 或者,如果在非封鎖套接字上發出 SIO_ADDRESS_LIST_CHANGE IOCTL,而且沒有重疊的參數(lpOverlapped/ lpCompletionRoutine 會設定為 NULL),則會立即完成,並出現錯誤 WSAEWOULDBLOCK。 然後,應用程式可以透過呼叫 WSAEventSelect 或 WSAAAsyncSelect 來等候位址清單變更事件,並在網路事件位掩碼中設定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 相關聯的句柄。
例如,如果特定提供者針對套接字的行為提供大量額外的控件,而且 (2) 控件的提供者特定程度足以對應到現有的 Windows Socket 函式,或未來可能定義的控件,可能會使用隨附介面。 建議使用元件物件模型 (COM),而不是使用此 IOCTL 來探索及追蹤套接字可能支援的其他介面。 此 IOCTL 與 COM 無法使用或因其他原因而無法使用的系統相容。
SIO_ASSOCIATE_PORT_RESERVATION (opcode 設定: I, T==3)
將套接字與持續性或運行時間保留區建立關聯,以取得埠保留令牌所識別之 TCP 或 UDP 埠區塊。 SIO_ASSOCIATE_PORT_RESERVATION IOCTL 必須在套接字系結之前發出。 如果套接字已系結,指派給它的埠將會從指定令牌所識別的埠保留區中選取。 如果指定的保留區沒有可用的埠, 系結 函數調用將會失敗。
如需詳細資訊,請參閱 SIO_ASSOCIATE_PORT_RESERVATION 參考。
Windows Vista 和更新版本的作系統支援SIO_ASSOCIATE_PORT_RESERVATION。
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)來成形。 如需詳細資訊,請參閱平臺 SDK 的 <
SIO_CPU_AFFINITY (opcode 設定: I, T==3)
啟用埠共用和接收指示平行處理。 當您的應用程式使用此套接字選項將套接字與不同的處理器產生關聯,然後將套接字系結至相同的位址時,接收指示會根據接收端調整 (RSS) 哈希分散到套接字。 RSS 設定不會變更,因此任何指定的流程(本機端點、遠端端點配對)一律會在相同的處理器上指出。 因此,屬於指定流程的所有封包都會向相同的套接字表示。 系結之前必須呼叫此 IOCTL,否則會傳回 WSAEINVAL。 輸入緩衝區是 USHORT 類型的處理器索引(以 0 為基礎)。 IOCTL 與SO_REUSEADDR和SO_REUSE_MULTICASTPORT不相容。 僅支援UDP套接字。
備註
如果您的目標是 Windows SDK 10.0.19041.0 版(Windows 10 版本 2004),請使用 值 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 中傳回的結構數目)可以根據 lpvBytesReturned 參數中傳回之輸出緩衝區的實際長度來決定。
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 逾時和間隔。 如需keep-alive選項的詳細資訊,請參閱IETF網站上 RFC 1122 中指定的通訊層需求一節 4.2.3.6。 (此資源只能以英文提供。
SIO_KEEPALIVE_VALS 可用來啟用或停用保持運作探查,並設定保持運作逾時和間隔。 keep-alive 逾時會以毫秒為單位指定逾時,在傳送第一個保持運作封包之前,不會有任何活動。 keep-alive 間隔會指定在未收到通知時,連續持續保持封包傳送之間的間隔,以毫秒為單位。
SO_KEEPALIVE選項,這是SOL_SOCKET套接字選項之一,也可以用來在連線上啟用或停用 TCP 保持運作,以及查詢此選項的目前狀態。 若要查詢套接字上是否啟用 TCP 保持運作,可以使用 SO_KEEPALIVE 選項呼叫 getsockopt 函 式 。 若要啟用或停用 TCP keep-alive,可以使用 SO_KEEPALIVE 選項呼叫 setsockopt 函 式 。 如果 tcp keep-alive 已啟用 SO_KEEPALIVE,則除非這些值已使用 SIO_KEEPALIVE_VALS 變更,否則預設 TCP 設定會用於保持運作逾時和間隔。
如需詳細資訊,請參閱 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_ID 已將 Guid 成員設定為 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 篩選平臺 (WFP) 支援網路流量檢查和修改。 在 Windows Vista 上,WFP 著重於主電腦是通訊端點的案例。 不過,在 Windows Server 2008 上,有邊緣防火牆實作會想要利用 WFP 平臺來檢查和 Proxy 傳遞流量。 因特網安全性與加速 (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 篩選平臺 (WFP) 重新導向服務所使用的重新導向記錄重新導向內容。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL 可用來提供重新導向套接字連線的 Proxy 連線追蹤。 此 WFP 功能可協助追蹤從連線的初始重新導向到目的地最終連線的重新導向記錄。
如需詳細資訊,請參閱 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 篩選平臺 (WFP) 重新導向服務使用。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL 可用來提供重新導向套接字連線的 Proxy 連線追蹤。 此 WFP 功能可協助追蹤從連線的初始重新導向到目的地最終連線的重新導向記錄。
如需詳細資訊,請參閱 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 函式的套接字句柄必須是下列其中一項:
- 已建立且位址系列設為 AF_INET 的 IPv4 套接字、將套接字類型設定為 SOCK_RAW,並將通訊協定設定為 IPPROTO_IP。
- 已建立且位址系列設為 AF_INET6的 IPv6 套接字、套接字類型設定為 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 上,這已變更,因此也會擷取從網路介面傳送的本機封包。 這包括在另一個介面上收到的封包,然後將系結至套接字的網路介面轉送至具有 SIO_RCVALL IOCTL 的網路介面。
設定此 IOCTL 需要本機電腦上的系統管理員許可權。
此功能有時稱為雜交模式。
SIO_RCVALL IOCTL 選項的可能值是在 Mstcpip.h 頭檔中定義的RCVALL_VALUE列舉中指定。 SIO_RCVALL的可能值如下所示:
術語 | 說明 |
---|---|
RCVALL_OFF |
停用此選項,讓套接字不會接收網路上的所有IPv4或IPv6封包。 |
RCVALL_ON |
啟用此選項,讓套接字接收網路上的所有 IPv4 或 IPv6 封包。 如果 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.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_RESERVATION (opcode 設定: I, T==3)
釋放 TCP 或 UDP 連接埠區塊的運行時間保留。 必須已使用 SIO_ACQUIRE_PORT_RESERVATION IOCTL 從發行程式取得要發行的運行時間保留。
如需詳細資訊,請參閱 SIO_RELEASE_PORT_RESERVATION 參考。
Windows Vista 和更新版本的作系統支援SIO_RELEASE_PORT_RESERVATION。
SIO_ROUTING_INTERFACE_CHANGE (opcode 設定: I, T==1)
若要接收路由介面變更的通知,該變更應該用來連線輸入緩衝區中的遠端位址(指定為 sockaddr 結構)。 完成此 IOCTL 時,不會提供新路由介面的輸出資訊;完成只是表示指定目的地的路由介面已變更,而且應該使用 IOCTL SIO_ROUTING_INTERFACE_QUERY 查詢。
假設應用程式會使用重疊的 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)。 遠端多播位址可能會在輸入緩衝區中提交,以取得多播傳輸慣用介面的位址。 在任何情況下,應用程式可以在後續 bind() 要求中使用傳回的介面位址。
請注意,路由可能會變更。 因此,應用程式無法依賴 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。 在此案例中,輸出緩衝區的必要大小將會以 lHTTPBytesReturned 傳回。 請注意,如果 lpvInBuffer、 lpvOutBuffer 或 lpvBytesReturned 參數未完全包含在使用者位址空間的有效部分,也會傳回 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 連線之後,仍允許使用 SO_RCVBUF 套接字選項來減少此套接字上的 TCP 接收緩衝區大小。 當 TargetOsVersion 成員設定為早於 Windows Vista 的值時,在連線建立之後,不允許使用 SO_RCVBUF 套接字選項來減少此套接字上的 TCP 接收緩衝區大小。 |
WsaBehaviorAutoTuning |
當 TargetOsVersion 成員設定為 Windows Vista 或更新版本的值時,會啟用接收視窗自動調整,並將 TCP 視窗縮放比例從預設值 8 縮減為 2。 當 TargetOsVersion 設定為早於 Windows Vista 的值時,會停用接收視窗自動調整。 TCP 視窗調整選項也會停用,且 true 接收視窗大小上限限製為 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。 從 Windows 10 版本 1809 (10.0) 開始,Microsoft Windows TCP 實作支援此 IOCTL;組建 17763 和更新版本,如下所示:當要求的優先順序值設定為 IoPriorityHintVeryLow 時,TCP 會使用已修改版本的 LEDBAT 演演算法 (定義於 RFC 6817) 來控制套接字上的輸出流量速率。 此 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)
Windows XP: 控制是否已報告 UDP PORT_UNREACHABLE訊息。 設定為 TRUE 以啟用報告。 設定為 FALSE 以停用報告。
SIO_UDP_NETRESET
控制是否透過 recv/WSARecv/etc 在 UDP 套接字上報告 NET_UNREACHABLE (TTL 過期) 訊息。在輸入緩衝區中傳遞 TRUE 以啟用 (如果支援則為預設值)。 傳遞 FALSE 以停用報告。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (opcode 設定: I, T==3)
將重新導向記錄設定為用於連線到最終目的地的新 TCP 套接字,以供 Windows 篩選平臺 (WFP) 重新導向服務使用。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL 會作為重新導向套接字連線上 Proxy 連線追蹤的一部分。 此 WFP 功能可協助追蹤從連線的初始重新導向到目的地最終連線的重新導向記錄。
如需詳細資訊,請參閱 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 頭檔。 Ws2tcpip.h 頭文件會自動包含 Ws2ipdef.h 頭檔。 Mswsockdef.h 頭文件會自動包含在 Mswsockdef.h 頭檔中。
需求
要求 | 價值觀 |
---|---|
頁首 |
|