SIO_QUERY_RSS_PROCESSOR_INFO控制項程式碼
描述
SIO_QUERY_RSS_PROCESSOR_INFO控制程式代碼會查詢通訊端與 RSS 處理器核心與 NUMA 節點之間的關聯。
若要執行這項作業,請使用下列參數呼叫 WSAIoctl 或 WSPIoctl 函式。
int WSAIoctl(
(socket) s, // descriptor identifying a socket
SIO_QUERY_RSS_PROCESSOR_INFO, // dwIoControlCode
NULL, // lpvInBuffer
0, // cbInBuffer
(LPVOID) lpvOutBuffer, // output buffer
(DWORD) cbOutBuffer, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
);
int WSPIoctl(
(socket) s, // descriptor identifying a socket
SIO_QUERY_RSS_PROCESSOR_INFO, // dwIoControlCode
NULL, // lpvInBuffer
0, // cbInBuffer
(LPVOID) lpvOutBuffer, // output buffer
(DWORD) cbOutBuffer, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
(LPWSATHREADID) lpThreadId, // a WSATHREADID structure
(LPINT) lpErrno // a pointer to the error code.
);
參數
s
識別通訊端的描述項。
dwIoControlCode
作業的控制程式代碼。 針對此作業使用 SIO_QUERY_RSS_PROCESSOR_INFO 。
lpvInBuffer
輸入緩衝區的指標。 這個作業未使用此參數。
cbInBuffer
輸入緩衝區的大小,以位元組為單位。 這個作業未使用此參數。
lpvOutBuffer
輸出緩衝區的指標。 如果lpOverlapped和lpCompletionRoutine參數為Null,此參數應該指向SOCKET_PROCESSOR_AFFINITY結構。
cbOutBuffer
輸出緩衝區的大小,以位元組為單位。 此參數至少必須是 SOCKET_PROCESSOR_AFFINITY 結構的大小。
lBytesReturned
變數的指標,可接收儲存在輸出緩衝區中的資料大小,以位元組為單位。
如果輸出緩衝區太小,則呼叫會失敗, WSAGetLastError 會傳回 WSAEINVAL, 而lBytesReturned 參數會指向零的 DWORD 值。
如果lpOverlapped為Null,則成功呼叫時所傳回之 lmicrosoftBytesReturned參數所指向的DWORD值不能為零。
如果重迭通訊端的 lpOverlapped 參數不是 Null ,則會起始無法立即完成的作業,而且稍後會指出完成。 傳回之lHTTPBytesReturned參數所指向的DWORD值可能是零,因為儲存的資料大小在重迭作業完成之前無法判斷。 當作業完成時發出適當的完成方法訊號時,可以擷取最終完成狀態。
lpvOverlapped
WSAOVERLAPPED結構的指標。
如果沒有重迭屬性建立通訊端,則會忽略 lpOverlapped參數。
如果使用重迭屬性開啟 s ,且 lpOverlapped 參數不是 Null,則會以重迭的 (非同步) 作業來執行作業。 在此情況下, lpOverlapped 參數必須指向有效的 WSAOVERLAPPED 結構。
對於重迭的作業, WSAIoctl 或 WSPIoctl 函式會立即傳回,並在作業完成時發出適當的完成方法訊號。 否則,在作業完成或發生錯誤之前,函式不會傳回 。
lpCompletionRoutine
類型:_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
當作業完成時呼叫的完成常式指標, (忽略非重迭通訊端) 。
lpThreadId
WSATHREADID結構的指標,供提供者在後續呼叫WPUQueueApc時使用。 提供者應該儲存參考的 WSATHREADID 結構, (在 WPUQueueApc 函式傳回之前,不要儲存相同) 的指標。
注意 此參數僅適用于 WSPIoctl 函式。
lpErrno
錯誤碼的指標。
注意 此參數僅適用于 WSPIoctl 函式。
傳回值
如果作業順利完成, WSAIoctl 或 WSPIoctl 函式會傳回零。
如果作業失敗或擱置中,WSAIoctl 或 WSPIoctl函式會傳回SOCKET_ERROR。 若要取得擴充錯誤資訊,請呼叫 WSAGetLastError。
錯誤碼 | 意義 |
---|---|
ERROR_INSUFFICIENT_BUFFER | 傳遞至系統呼叫的資料區域太小。 如果 lpvOutBuffer 參數指向的緩衝區太小,且傳入 cbOutBuffer 參數的緩衝區大小太小,就會傳回此錯誤。 所需的緩衝區大小將會在 lBytesReturned 參數中傳回。 如果 cbOutBuffer 參數小於 SOCKET_PROCESSOR_AFFINITY 結構的大小,就會傳回此錯誤。 |
WSA_IO_PENDING | 已成功起始重迭的作業,稍後將會指出完成。 |
WSA_OPERATION_ABORTED | 因為通訊端關閉或 執行 SIO_FLUSH IOCTL 命令,所以已取消重迭的作業。 |
WSAEFAULT | lpvInBuffer、lpvoutBuffer、lmicrosoftBytesReturned、lpOverlapped或lpCompletionRoutine參數並未完全包含在使用者位址空間的有效部分。 |
WSAEINPROGRESS | 當回呼正在進行時,會叫用函式。 |
WSAEINTR | 封鎖作業已中斷。 |
WSAEINVAL | dwIoControlCode參數不是有效的命令,或無法接受指定的輸入參數,或命令不適用於指定的通訊端類型。 如果 cbOutBuffer 參數小於 SOCKET_PROCESSOR_AFFINITY 結構的大小,就會傳回此錯誤。 |
WSAENETDOWN | 網路子系統失敗。 |
WSAENOPROTOOPT | 指定的通訊協定不支援通訊端選項。 |
WSAENOTCONN | 通訊端 未 連線。 |
WSAENOTSOCK | 描述項 s 不是通訊端。 |
WSAEOPNOTSUPP | 不支援指定的 IOCTL 命令。 如果傳輸提供者不支援 SIO_QUERY_RSS_PROCESSOR_INFO IOCTL,就會傳回此錯誤。 |
備註
Windows 8和 Windows Server 2012更新版本的作業系統支援SIO_QUERY_RSS_PROCESSOR_INFO IOCTL。
SIO_QUERY_RSS_PROCESSOR_INFO IOCTL 可用來判斷通訊端與 RSS 處理器核心與 NUMA 節點之間的關聯。 這個 IOCTL 會傳回包含PROCESSOR_NUMBER和 NUMA 節點識別碼的SOCKET_PROCESSOR_AFFINITY結構。 傳回 PROCESSOR_NUMBER 結構包含群組內的組號和相對處理器編號。
如果通訊端是 UDP 通訊端,則必須連接通訊端, SIO_QUERY_RSS_PROCESSOR_INFO IOCTL 才能正常運作。