CAsyncSocket::IOCtl
Appelez la fonction membre pour vérifier l'état d'un socket.
BOOL IOCtl(
long lCommand,
DWORD* lpArgument
);
Paramètres
lCommand
L'ordre de exécution du socket.lpArgument
Un pointeur vers un paramètre pour lCommand.
Valeur de retour
Une valeur différente de zéro si la fonction est réussie ; sinon 0, et le code d'erreur spécifique peuvent être récupérés en appelant GetLastError. Les erreurs suivantes s'appliquent à cette fonction membre :
WSANOTINITIALISED A réussi AfxSocketInit doit se produire avant d'utiliser cette API.
WSAENETDOWN que l'implémentation de Windows Sockets l'a détecté que le sous-système réseau a échoué.
WSAEINVAL lCommand n'est pas une commande valide, ou lpArgument n'est pas un paramètre acceptable pour lCommand, ou la commande ne s'applique pas au type de socket fourni.
WSAEINPROGRESS se bloque l'exécution de Windows Sockets est en cours.
WSAENOTSOCK le modèle n'est pas un socket.
Notes
Cette routine peut être utilisé dans tout socket dans un état. Il permet d'obtenir ou extraire des paramètres des instructions associés au socket, indépendamment du protocole et le sous-système de communication. Les commandes suivantes sont prises en charge :
FIONBIO activent ou désactivent mode non bloquant du socket. Les points de paramètre d' lpArgument à DWORD, qui est différent de zéro si le mode non bloquant doit être activé et zéro s'il doit être désactivé. Si AsyncSelect a été émis sur un socket, puis toute tentative d'utiliser IOCtl pour définir le socket en mode bloquant échoue avec WSAEINVAL. Pour définir le socket en mode blocage et empêcher l'erreur de WSAEINVAL , une application doit d'abord désactiver AsyncSelect en appelant AsyncSelect avec le paramètre d' lEvent égal à 0, puis appelle IOCtl.
FIONREAD déterminent le nombre maximal d'octets qui peuvent être lus avec un appel de Recevoir de ce socket. Les points de paramètre d' lpArgument à DWORD dans lequel IOCtl stocke le résultat. Si ce socket est de type SOCK_STREAM, FIONREAD retourne la quantité de données qui peuvent être lues dans Recevoirunique ; il s'agit normalement identique à la quantité de données mises en file d'attente du socket. Si ce socket est de type SOCK_DGRAM, FIONREAD retourne la taille du premier datagramme mis en file d'attente du socket.
SIOCATMARK déterminent si toutes les données hors bande ont été lues. Cela s'applique uniquement à un socket du type SOCK_STREAM configuré pour la réception intégrée de toutes les données hors bande (SO_OOBINLINE). Si données hors bande n'attend pas à être lue, l'opération retourne une valeur différente de zéro. Sinon il retourne 0, et l' Recevoir ou ReceiveFrom effectué du socket en récupérera ou toutes les données précédant « jeton » ; l'application doit utiliser l'exécution de SIOCATMARK pour déterminer si les données restent. S'il y a des données normales précédant les données (hors plage) « urgentes », il est reçu dans l'ordre. (Notez que Recevoir ou ReceiveFrom ne mixera jamais de données hors plage et normales dans le même appel.) Les points de paramètre d' lpArgument à DWORD dans lequel IOCtl stocke le résultat.
Cette fonction est un sous-ensemble d' ioctl() comme utilisée dans des sockets de Berkeley. En particulier, il n'y avait pas de commande équivalente à FIOASYNC, tandis que SIOCATMARK est la seule commande de socket- niveau pris en charge.
Configuration requise
Header: afxsock.h