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 结构的大小。
lpcbBytesReturned
指向变量的指针,该变量接收存储在输出缓冲区中的数据的大小(以字节为单位)。
如果输出缓冲区太小,则调用失败, WSAGetLastError 返回 WSAEINVAL, lBytesReturned 参数指向 DWORD 值零。
如果 lpOverlapped 为 NULL,则成功调用时返回的 lpcbBytesReturned 参数指向的 DWORD 值不能为零。
如果对于重叠套接字, lpOverlapped 参数不是 NULL ,则将启动无法立即完成的操作,并在以后的时间指示完成。 返回的 lpcbBytesReturned 参数指向的 DWORD 值可能为零,因为在重叠操作完成之前无法确定存储的数据的大小。 当操作完成时发出相应的完成方法信号时,可以检索最终完成状态。
lpvOverlapped
指向 WSAOVERLAPPED 结构的指针。
如果套接字 是在 不使用重叠属性的情况下创建的,则忽略 lpOverlapped 参数。
如果 已 使用重叠属性打开,并且 lpOverlapped 参数不是 NULL,则该操作将作为重叠 (异步) 操作执行。 在这种情况下, lpOverlapped 参数必须指向有效的 WSAOVERLAPPED 结构。
对于重叠操作, WSAIoctl 或 WSPIoctl 函数将立即返回,并在操作完成时发出相应的完成方法的信号。 否则,函数在操作完成或发生错误之前不会返回。
lpCompletionRoutine
类型:_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
指向完成操作时调用的完成例程的指针, (忽略非重叠套接字) 。
lpThreadId
指向 WSATHREADID 结构的指针,供提供程序在后续调用 WPUQueueApc 时使用。 在 WPUQueueApc 函数返回之前,提供程序应存储引用的 WSATHREADID 结构 (而不是指向同一) 的指针。
注意 此参数仅适用于 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、lBytesReturned、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 节点 ID 的 SOCKET_PROCESSOR_AFFINITY 结构。 返回 的PROCESSOR_NUMBER 结构包含组号和组中的相对处理器编号。
如果套接字是 UDP 套接字,则必须连接套接字, SIO_QUERY_RSS_PROCESSOR_INFO IOCTL 才能正常工作。