Fonction ioctlsocket (winsock.h)
La fonction ioctlsocket contrôle le mode d’E/S d’un socket.
Syntaxe
int ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
Paramètres
[in] s
Descripteur identifiant un socket.
[in] cmd
Commande à exécuter sur les sockets. Voir Winsock IOCTLs.
[in, out] argp
Pointeur vers un paramètre pour cmd.
Valeur retournée
Une fois l’exécution réussie, ioctlsocket retourne zéro. Sinon, une valeur de SOCKET_ERROR est retournée et un code d’erreur spécifique peut être récupéré en appelant WSAGetLastError.
Code d'erreur | Signification |
---|---|
Un appel WSAStartup réussi doit se produire avant d’utiliser cette fonction. | |
Le sous-système réseau a échoué. | |
Un appel Windows Sockets 1.1 bloquant est en cours ou le fournisseur de services traite toujours une fonction de rappel. | |
Le descripteur s n’est pas un socket. | |
Le paramètre argp n’est pas une partie valide de l’espace d’adressage utilisateur. |
Remarques
La fonction ioctlsocket peut être utilisée sur n’importe quel socket dans n’importe quel état. Il est utilisé pour définir ou récupérer certains paramètres d’exploitation associés au socket, indépendamment du protocole et du sous-système de communication. Voici les commandes prises en charge à utiliser dans le paramètre cmd et leur sémantique :
La fonction WSAIoctl est utilisée pour définir ou récupérer les paramètres d’exploitation associés au socket, au protocole de transport ou au sous-système de communication.
La fonction WSAIoctl est plus puissante que la fonction ioctlsocket et prend en charge un grand nombre de valeurs possibles pour les paramètres d’exploitation à définir ou à récupérer.
Exemple de code
L’exemple suivant illustre l’utilisation de la fonction ioctlsocket .
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
void main()
{
//-------------------------
// Initialize Winsock
WSADATA wsaData;
int iResult;
u_long iMode = 0;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//-------------------------
// Create a SOCKET object.
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//-------------------------
// Set the socket I/O mode: In this case FIONBIO
// enables or disables the blocking mode for the
// socket based on the numerical value of iMode.
// If iMode = 0, blocking is enabled;
// If iMode != 0, non-blocking mode is enabled.
iResult = ioctlsocket(m_socket, FIONBIO, &iMode);
if (iResult != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", iResult);
}
Compatibilité
Cette fonction ioctlsocket exécute uniquement un sous-ensemble de fonctions sur un socket par rapport à la fonction ioctl trouvée dans les sockets Berkeley. La fonction ioctlsocket n’a aucun paramètre de commande équivalent à fiOASYNC d’ioctl, et SIOCATMARK est la seule commande au niveau du socket prise en charge par ioctlsocket.Windows Phone 8 : cette fonction est prise en charge pour les applications Windows Phone Store sur Windows Phone 8 et versions ultérieures.
Windows 8.1 et Windows Server 2012 R2 : cette fonction est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8.1, Windows Vista [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | winsock.h (inclure Winsock2.h) |
Bibliothèque | Ws2_32.lib |
DLL | Ws2_32.dll |