Поделиться через


Код элемента управления 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

Указатель на выходной буфер. Этот параметр должен указывать на структуру SOCKET_PROCESSOR_AFFINITY , если параметры lpOverlapped и lpCompletionRoutine имеют значение NULL.

cbOutBuffer

Размер выходного буфера в байтах. Этот параметр должен быть по крайней мере размером SOCKET_PROCESSOR_AFFINITY структуры.

lpcbBytesReturned

Указатель на переменную, которая получает размер в байтах данных, хранящихся в выходном буфере.

Если выходной буфер слишком мал, вызов завершается ошибкой, WSAGetLastError возвращает WSAEINVAL, а параметр lpcbBytesReturned указывает на значение DWORD , равное нулю.

Если lpOverlapped имеет значение NULL, значение DWORD , на которое указывает параметр lpcbBytesReturned , возвращаемое при успешном вызове, не может быть равным нулю.

Если параметр lpOverlapped не равен NULL для перекрывающихся сокетов, будут инициированы операции, которые не могут быть завершены немедленно, а завершение будет указано позже. Значение DWORD , на которое указывает возвращаемый параметр lpcbBytesReturned , может быть равным нулю, так как размер хранимых данных не может быть определен до завершения перекрывающейся операции. Окончательное состояние завершения можно получить, когда соответствующий метод завершения получает сигнал о завершении операции.

lpvOverlapped

Указатель на структуру WSAOVERLAPPED .

Если сокеты были созданы без перекрываемого атрибута, параметр lpOverlapped игнорируется.

Если объект был открыт с перекрывающимся атрибутом, а параметр 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 , слишком мал. Требуемый размер буфера будет возвращен в параметре lpcbBytesReturned . Эта ошибка возвращается, если параметр cbOutBuffer меньше размера структуры SOCKET_PROCESSOR_AFFINITY .
WSA_IO_PENDING Перекрываемая операция была успешно инициирована, и ее завершение будет указано позже.
WSA_OPERATION_ABORTED Перекрываемая операция была отменена из-за закрытия сокета или выполнения команды IOCTL SIO_FLUSH .
WSAEFAULT Параметр lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped или lpCompletionRoutine не полностью содержится в допустимой части адресного пространства пользователя.
WSAEINPROGRESS Функция вызывается при выполнении обратного вызова.
WSAEINTR Блокирующая операция была прервана.
WSAEINVAL Параметр dwIoControlCode не является допустимой командой, или указанный входной параметр недопустим, либо команда не применима к указанному типу сокета. Эта ошибка возвращается, если параметр cbOutBuffer меньше размера структуры SOCKET_PROCESSOR_AFFINITY .
WSAENETDOWN Произошел сбой сетевой подсистемы.
WSAENOPROTOOPT Параметр сокета не поддерживается в указанном протоколе.
WSAENOTCONN Сокет не подключен.
WSAENOTSOCK Дескриптор не является сокетом.
WSAEOPNOTSUPP Указанная команда IOCTL не поддерживается. Эта ошибка возвращается, если поставщик транспорта не поддерживает SIO_QUERY_RSS_PROCESSOR_INFO IOCTL.

Комментарии

IOCTL SIO_QUERY_RSS_PROCESSOR_INFO поддерживается в Windows 8, а также Windows Server 2012 и более поздних версиях операционной системы.

SIO_QUERY_RSS_PROCESSOR_INFO IOCTL используется для определения связи между сокетом и ядром процессора RSS и узлом NUMA. Этот IOCTL возвращает структуру SOCKET_PROCESSOR_AFFINITY , содержащую PROCESSOR_NUMBER и идентификатор узла NUMA. Возвращаемая PROCESSOR_NUMBER структура содержит номер группы и относительный номер процессора в группе.

Если сокет является сокетом UDP, он должен быть подключен для правильной работы SIO_QUERY_RSS_PROCESSOR_INFO IOCTL.

См. также раздел

PROCESSOR_NUMBER

Сокета

SOCKET_PROCESSOR_AFFINITY

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW