Partager via


code de contrôle SIO_QUERY_TRANSPORT_SETTING

Description

Le code de contrôle SIO_QUERY_TRANSPORT_SETTING interroge les paramètres de transport sur un socket.

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_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,     // pointer to the 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_TRANSPORT_SETTING, // dwIoControlCode
  (LPVOID) lpvInBuffer,  // pointer to the input buffer
  (DWORD) cbInBuffer,    // size, in bytes, of the input buffer
  (LPVOID) lpvOutBuffer,     // pointer to the 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_TRANSPORT_SETTING pour cette opération.

lpvInBuffer

Pointeur vers la mémoire tampon d’entrée. Ce paramètre contient un pointeur vers une structure où le premier membre de la structure est une structure TRANSPORT_SETTING_ID qui détermine le paramètre de transport interrogé.

cbInBuffer

Taille, en octets, de la mémoire tampon d’entrée. Ce paramètre dépend du paramètre de transport interrogé.

lpvOutBuffer

Pointeur vers la mémoire tampon de sortie. Ce paramètre dépend du paramètre de transport interrogé si les paramètres lpOverlapped et lpCompletionRoutine ont la valeur NULL.

cbOutBuffer

Taille, en octets, de la mémoire tampon de sortie.

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 .
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 lpvOutBuffer, lpcbBytesReturned, lpOverlapped ou lpCompletionRoutine n’est pas totalement 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é.
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_TRANSPORT_SETTING IOCTL n’est pas pris en charge par le fournisseur de transport.

Notes

Le SIO_QUERY_TRANSPORT_SETTING IOCTL est pris en charge sur Windows 8, Windows Server 2012 et versions ultérieures du système d’exploitation.

Le SIO_QUERY_TRANSPORT_SETTING IOCTL est un IOCTL générique utilisé pour interroger les paramètres de transport sur un socket. Le paramètre de transport interrogé est basé sur les TRANSPORT_SETTING_ID passées dans le paramètre lpvInBuffer .

Le seul paramètre de transport actuellement défini concerne la fonctionnalité REAL_TIME_NOTIFICATION_CAPABILITY sur un socket TCP.

Si le TRANSPORT_SETTING_ID passé dans le paramètre lpvInBuffer a le membre GUID défini sur REAL_TIME_NOTIFICATION_CAPABILITY, il s’agit d’une demande d’interrogation des paramètres de notification en temps réel pour le socket TCP utilisé avec controlChannelTrigger pour recevoir des notifications réseau en arrière-plan dans une application du Windows Store. Le paramètre lpvInBuffer doit pointer vers une structure TRANSPORT_SETTING_ID . Le paramètre lpvOutBuffer doit pointer vers une structure REAL_TIME_NOTIFICATION_SETTING_OUTPUT . Ce paramètre de transport s’applique uniquement aux sockets TCP. Ce paramètre de transport permet à WinInet ou à des services réseau similaires d’interroger un socket TCP donné pour déterminer le status ControlChannelTrigger. Une application du Windows Store n’appelle pas directement ce IOCTL. Si l’appel WSAIoctl ou WSPIoctl réussit, cet IOCTL retourne une structure REAL_TIME_NOTIFICATION_SETTING_OUTPUT avec la status actuelle.

Le SIO_QUERY_TRANSPORT_SETTING IOCTL permet à WinInet ou à des services réseau similaires d’interroger le paramètre de transport status pour un socket TCP donné afin de déterminer si ControlChannelTrigger est activé sur le socket. Une application du Windows Store n’appelle pas directement ce IOCTL.

Ce IOCTL s’applique uniquement aux sockets TCP.

Voir aussi

CONTROL_CHANNEL_TRIGGER_STATUS

ControlChannelTrigger

REAL_TIME_NOTIFICATION_SETTING_OUTPUT

SIO_APPLY_TRANSPORT_SETTING

socket

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW