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
WSANOTINITIALISED
Un appel WSAStartup réussi doit se produire avant d’utiliser cette fonction.
WSAENETDOWN
Le sous-système réseau a échoué.
WSAEINPROGRESS
Un appel Windows Sockets 1.1 bloquant est en cours ou le fournisseur de services traite toujours une fonction de rappel.
WSAENOTSOCK
Le descripteur s n’est pas un socket.
WSAEFAULT
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

Voir aussi

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Winsock Functions

Référence Winsock

getsockopt

setsockopt

socket