SIO_QUERY_RSS_PROCESSOR_INFO控制代码

说明

SIO_QUERY_RSS_PROCESSOR_INFO控制代码查询套接字与 RSS 处理器核心与 NUMA 节点之间的关联。

若要执行此操作,请使用以下参数调用 WSAIoctlWSPIoctl 函数。

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

指向输出缓冲区的指针。 如果 lpOverlappedlpCompletionRoutine 参数为 NULL,则此参数应指向SOCKET_PROCESSOR_AFFINITY结构。

cbOutBuffer

输出缓冲区的大小(以字节为单位)。 此参数必须至少为 SOCKET_PROCESSOR_AFFINITY 结构的大小。

lpcbBytesReturned

指向变量的指针,该变量接收存储在输出缓冲区中的数据的大小(以字节为单位)。

如果输出缓冲区太小,则调用失败, WSAGetLastError 返回 WSAEINVALlBytesReturned 参数指向 DWORD 值零。

如果 lpOverlappedNULL,则成功调用时返回的 lpcbBytesReturned 参数指向的 DWORD 值不能为零。

如果对于重叠套接字, lpOverlapped 参数不是 NULL ,则将启动无法立即完成的操作,并在以后的时间指示完成。 返回的 lpcbBytesReturned 参数指向的 DWORD 值可能为零,因为在重叠操作完成之前无法确定存储的数据的大小。 当操作完成时发出相应的完成方法信号时,可以检索最终完成状态。

lpvOverlapped

指向 WSAOVERLAPPED 结构的指针。

如果套接字 是在 不使用重叠属性的情况下创建的,则忽略 lpOverlapped 参数。

如果 使用重叠属性打开,并且 lpOverlapped 参数不是 NULL,则该操作将作为重叠 (异步) 操作执行。 在这种情况下, lpOverlapped 参数必须指向有效的 WSAOVERLAPPED 结构。

对于重叠操作, WSAIoctlWSPIoctl 函数将立即返回,并在操作完成时发出相应的完成方法的信号。 否则,函数在操作完成或发生错误之前不会返回。

lpCompletionRoutine

类型:_In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

指向完成操作时调用的完成例程的指针, (忽略非重叠套接字) 。

lpThreadId

指向 WSATHREADID 结构的指针,供提供程序在后续调用 WPUQueueApc 时使用。 在 WPUQueueApc 函数返回之前,提供程序应存储引用的 WSATHREADID 结构 (而不是指向同一) 的指针。

注意 此参数仅适用于 WSPIoctl 函数。

lpErrno

指向错误代码的指针。

注意 此参数仅适用于 WSPIoctl 函数。

返回值

如果操作成功完成, WSAIoctlWSPIoctl 函数将返回零。

如果操作失败或挂起, WSAIoctlWSPIoctl 函数将返回 SOCKET_ERROR。 若要获取扩展错误信息,请调用 WSAGetLastError

错误代码 含义
ERROR_INSUFFICIENT_BUFFER 传递给系统调用的数据区域太小。 如果 lpvOutBuffer 参数指向的缓冲区大小在 cbOutBuffer 参数中传递的缓冲区太小,则返回此错误。 所需的缓冲区大小将在 lBytesReturned 参数中返回。 如果 cbOutBuffer 参数小于 SOCKET_PROCESSOR_AFFINITY 结构的大小,则返回此错误。
WSA_IO_PENDING 已成功启动重叠操作,稍后将指示完成。
WSA_OPERATION_ABORTED 由于套接字关闭或执行 SIO_FLUSH IOCTL 命令,因此取消了重叠操作。
WSAEFAULT lpvInBufferlpvoutBufferlBytesReturnedlpOverlappedlpCompletionRoutine 参数并不完全包含在用户地址空间的有效部分。
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 才能正常工作。

另请参阅

PROCESSOR_NUMBER

socket

SOCKET_PROCESSOR_AFFINITY

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW