code de contrôle SIO_QUERY_RSS_PROCESSOR_INFO
Description
Le code de contrôle SIO_QUERY_RSS_PROCESSOR_INFO interroge l’association entre un socket et un cœur de processeur RSS et un nœud NUMA.
Pour effectuer cette opération, appelez la fonction WSAIoctl ou WSPIoctl avec les paramètres suivants.
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.
);
Paramètres
s
Descripteur identifiant un socket.
dwIoControlCode
Code de contrôle pour l’opération. Utilisez SIO_QUERY_RSS_PROCESSOR_INFO pour cette opération.
lpvInBuffer
Pointeur vers la mémoire tampon d’entrée. Ce paramètre n’est pas utilisé pour cette opération.
cbInBuffer
Taille, en octets, de la mémoire tampon d’entrée. Ce paramètre n’est pas utilisé pour cette opération.
lpvOutBuffer
Pointeur vers la mémoire tampon de sortie. Ce paramètre doit pointer vers une structure SOCKET_PROCESSOR_AFFINITY si les paramètres lpOverlapped et lpCompletionRoutine ont la valeur NULL.
cbOutBuffer
Taille, en octets, de la mémoire tampon de sortie. Ce paramètre doit avoir au moins la taille d’une structure SOCKET_PROCESSOR_AFFINITY .
lpcbBytesReturned
Pointeur vers une variable qui reçoit la taille, en octets, des données stockées dans la mémoire tampon de sortie.
Si la mémoire tampon de sortie est trop petite, l’appel échoue, WSAGetLastError renvoie WSAEINVAL et le paramètre lpcbBytesReturned pointe vers une valeur DWORD de zéro.
Si lpOverlapped a la valeur NULL, la valeur DWORD pointée par le paramètre lpcbBytesReturned retourné lors d’un appel réussi ne peut pas être égale à zéro.
Si le paramètre lpOverlapped n’est pas NULL pour les sockets superposés, les opérations qui ne peuvent pas être effectuées immédiatement sont lancées et l’achèvement sera indiqué ultérieurement. La valeur DWORD pointée par le paramètre lpcbBytesReturned retourné peut être égale à zéro, car la taille des données stockées ne peut pas être déterminée tant que l’opération superposée n’est pas terminée. La status d’achèvement finale peut être récupérée lorsque la méthode d’achèvement appropriée est signalée lorsque l’opération est terminée.
lpvOverlapped
Pointeur vers une structure WSAOVERLAPPED .
Si le socket s a été créé sans l’attribut superposé, le paramètre lpOverlapped est ignoré.
Si s a été ouvert avec l’attribut qui se chevauche et que le paramètre lpOverlapped n’a pas la valeur NULL, l’opération est effectuée en tant qu’opération (asynchrone) qui se chevauche. Dans ce cas, le paramètre lpOverlapped doit pointer vers une structure WSAOVERLAPPED valide.
Pour les opérations qui se chevauchent, la fonction WSAIoctl ou WSPIoctl retourne immédiatement, et la méthode d’achèvement appropriée est signalée une fois l’opération terminée. Sinon, la fonction ne retourne pas tant que l’opération n’est pas terminée ou qu’une erreur se produit.
lpCompletionRoutine
Type : _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
Pointeur vers la routine d’achèvement appelée une fois l’opération terminée (ignorée pour les sockets qui ne se chevauchent pas).
lpThreadId
Pointeur vers une structure WSATHREADID à utiliser par le fournisseur dans un appel ultérieur à WPUQueueApc. Le fournisseur doit stocker la structure WSATHREADID référencée (pas le pointeur vers le même) jusqu’à ce que la fonction WPUQueueApc soit retournée.
Note Ce paramètre s’applique uniquement à la fonction WSPIoctl .
lpErrno
Pointeur vers le code d’erreur.
Note Ce paramètre s’applique uniquement à la fonction WSPIoctl .
Valeur retournée
Si l’opération se termine correctement, la fonction WSAIoctl ou WSPIoctl retourne zéro.
Si l’opération échoue ou est en attente, la fonction WSAIoctl ou WSPIoctl retourne SOCKET_ERROR. Pour obtenir des informations d’erreur étendues, appelez WSAGetLastError.
Code d'erreur | Signification |
---|---|
ERROR_INSUFFICIENT_BUFFER | La zone de données passée à un appel système est trop petite. Cette erreur est retournée si la mémoire tampon pointée vers par le paramètre lpvOutBuffer avec une taille de mémoire tampon passée dans le paramètre cbOutBuffer est trop petite. La taille de mémoire tampon requise est retournée dans le paramètre lpcbBytesReturned . Cette erreur est retournée si le paramètre cbOutBuffer est inférieur à la taille d’une structure de SOCKET_PROCESSOR_AFFINITY . |
WSA_IO_PENDING | Une opération superposée a été lancée avec succès et l’achèvement sera indiqué ultérieurement. |
WSA_OPERATION_ABORTED | Une opération qui se chevauche a été annulée en raison de la fermeture du socket ou de l’exécution de la commande IOCTL SIO_FLUSH . |
WSAEFAULT | Le paramètre lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped ou lpCompletionRoutine n’est pas entièrement contenu dans une partie valide de l’espace d’adressage utilisateur. |
WSAEINPROGRESS | La fonction est appelée lorsqu’un rappel est en cours. |
WSAEINTR | Une opération de blocage a été interrompue. |
WSAEINVAL | Le paramètre dwIoControlCode n’est pas une commande valide, ou un paramètre d’entrée spécifié n’est pas acceptable, ou la commande n’est pas applicable au type de socket spécifié. Cette erreur est retournée si le paramètre cbOutBuffer est inférieur à la taille d’une structure de SOCKET_PROCESSOR_AFFINITY . |
WSAENETDOWN | Le sous-système réseau a échoué. |
WSAENOPROTOOPT | L’option socket n’est pas prise en charge sur le protocole spécifié. |
WSAENOTCONN | Le socket n’est pas connecté. |
WSAENOTSOCK | Le descripteur s n’est pas un socket. |
WSAEOPNOTSUPP | La commande IOCTL spécifiée n’est pas prise en charge. Cette erreur est retournée si le SIO_QUERY_RSS_PROCESSOR_INFO IOCTL n’est pas pris en charge par le fournisseur de transport. |
Notes
Le SIO_QUERY_RSS_PROCESSOR_INFO IOCTL est pris en charge sur Windows 8, Windows Server 2012 et versions ultérieures du système d’exploitation.
La SIO_QUERY_RSS_PROCESSOR_INFO IOCTL est utilisée pour déterminer l’association entre un socket et un cœur de processeur RSS et un nœud NUMA. Cet IOCTL retourne une structure SOCKET_PROCESSOR_AFFINITY qui contient le PROCESSOR_NUMBER et l’ID de nœud NUMA. La structure PROCESSOR_NUMBER retournée contient un numéro de groupe et un numéro de processeur relatif au sein du groupe.
Si le socket est un socket UDP, le socket doit être connecté pour que le SIO_QUERY_RSS_PROCESSOR_INFO IOCTL fonctionne correctement.