CAsyncSocket::SetSockOpt

BOOL SetSockOpt ( int nOptionName, const void * lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET );

Valeur de retour

Différent de zéro si la fonction est réussie ; sinon, 0 et un code d'erreur spécifique peuvent être récupérée par appeler GetLastError. Les erreurs suivantes s'appliquent à cette fonction membre:

Paramètres

nOptionName

L'option de socket pour lequel la valeur doit être définie.

lpOptionValue

Un pointeur vers la mémoire tampon dans laquelle la valeur de l'option demandée est fournie.

nOptionLen

La taille de la mémoire tampon en octets de lpOptionValue.

nLevel

Le niveau au cours de laquelle l'option est définie ; les niveaux de prise en charge seulement sont SOL_SOCKET et IPPROTO_TCP.

Remarques

Appelez cette fonction membre pour définir une option de socket. SetSockOpt définit la valeur courante d'une option de socket associée à un socket de tout type, dans tout état. Bien que les options peuvent exister à de multiples niveaux de protocole, cette spécification définit seulement les options qui existent à l'échelon sommital « socket ». Options affectent les opérations de socket, comme si les données accélérées sont reçues dans le flux de données normal, si la diffusion de messages peuvent être envoyés sur le socket et ainsi de suite.

Il existe deux types d'options de socket : Boolean options Activer ou désactiveront une fonctionnalité ou un comportement et les options qui nécessitent une valeur d'entier ou de la structure. Pour activer une option booléenne, lpOptionValue signale un entier différent de zéro. Pour désactiver les points de lpOptionValue option un entier égal à zéro. nOptionLen doit être égal à sizeof(BOOL) pour les options booléennes. Pour les autres options, lpOptionValue points à l'entier ou de la structure qui contient la valeur souhaitée pour l'option et nOptionLen est la longueur de l'entier ou de la structure.

SO_LINGER contrôle les mesures prises lorsque des données non envoyées en file d'attente sur un socket et la fonction Close est appelée pour fermer le socket. Pour plus d'informations, voir Considérations de programmation des Sockets Windows dans la documentation du SDK Win32.

Par défaut, un socket ne peut pas être lié (voir lier) à une adresse locale qui est déjà utilisé. À l'occasion, toutefois, il peut être souhaitable de « réutiliser » une adresse de cette façon. Puisque chaque lien est identifié de manière unique par la combinaison des adresses locales et distantes, n'a aucun problème à avoir deux sockets liés à la même adresse locale, tant les adresses distantes sont différents.

D'informer l'implémentation Windows Sockets qu'un appel de lier un socket pas devrait être refusé parce que l'adresse souhaitée est déjà utilisé par un autre socket, l'application doit définir l'option de socket SO_REUSEADDR pour l'attache avant d'émettre l'appel de lier . Notez que l'option est interprétée uniquement au moment de l'appel de lier : il est donc inutile (mais inoffensif) pour définir l'option sur un socket qui n'est ne pas lié à une adresse existante, et définissant ou en réinitialisant l'option après la lier appel n'a aucun effet sur cette ou toute autre socket.

Une application peut demander que la mise en œuvre de Windows Sockets permettent l'utilisation de paquets « keep-alive » sur les connexions de Transmission Control Protocol (TCP) en activant l'option SO_KEEPALIVE de la socket. (Pour plus d'informations sur les paquets « keep-alive », voir Considérations de programmation des Sockets Windows dans la documentation du SDK Win32.) Une implémentation Windows Sockets besoin de prend pas en charge l'utilisation de persistantes : si elle le fait, la sémantique précise sont spécifiques à la mise en œuvre, mais doit être conforme à l'article 4.2.3.6 de la RFC 1122: « exigences pour les hôtes Internet — couches Communication. » Si une connexion est abandonnée à la suite de « persistantes » le code d'erreur WSAENETRESET revient à tous les appels en cours sur le socket, et tous les appels échouera avec WSAENOTCONN.

L'option TCP_NODELAY désactive l'algorithme Nagle. L'algorithme Nagle est utilisé pour réduire le nombre de petits paquets, envoyé par un hôte par la mise en mémoire tampon de données envoyer non reconnue jusqu'à ce qu'un paquet de taille normale peut être envoyé. Cependant, pour certaines applications de cet algorithme peut nuire au rendement et TCP_NODELAY peut être utilisé pour couper le moteur. Auteurs de demande ne devraient pas définir TCP_NODELAY à moins que l'impact de faire ainsi est bien comprises et désiré, puisque l'établissement TCP_NODELAY peut avoir un impact négatif significatif sur les performances du réseau. TCP_NODELAY est la seule prise en charge option de socket qui utilise le niveau IPPROTO_TCP; toutes les autres options utilisent niveau SOL_SOCKET.

Certaines implémentations de l'approvisionnement de Windows Sockets de sortie des informations de débogage si l'option SO_DEBUG est définie par une application.

Les options suivantes sont prises en charge pour SetSockOpt. Le Type identifie le type de données traitées par lpOptionValue.

Valeur Type Sens
SO_BROADCAST BOOL Permettre la transmission des messages de diffusion sur le socket.
SO_DEBUG BOOL Enregistrement d'informations de débogage.
SO_DONTLINGER BOOL Ne pas bloquer les proches attendent des données en attente d'être envoyé. Définition de cette option équivaut à SO_LINGER avec l_onoff défini à zéro.
SO_DONTROUTE BOOL Ne route : envoyer directement à l'interface.
SO_KEEPALIVE BOOL Envoyer des messages Keepalive.
SO_LINGER struct LINGER S'attarder sur l'étroite si les données non envoyées sont présentes.
SO_OOBINLINE BOOL Recevoir des données hors-bande dans le flux de données normal.
SO_RCVBUF int Spécifier la taille de la mémoire tampon pour reçoit.
SO_REUSEADDR BOOL Permettre à l'attache d'être lié à une adresse qui est déjà utilisé. (Voir lier).
SO_SNDBUF int Spécifier la taille de la mémoire tampon pour envoie.
TCP_NODELAY BOOL Désactive l'algorithme Nagle pour envoyer coalescence.

Options de Berkeley Software Distribution (BSD) non pris en charge pour SetSockOpt sont:

Valeur Type Sens
SO_ACCEPTCONN BOOL Socket est à l'écoute
SO_ERROR int Obtenir le statut de l'erreur et claire.
SO_RCVLOWAT int Recevoir l'eau marque.
SO_RCVTIMEO int Recevoir le timeout
SO_SNDLOWAT int Envoyer l'eau marque.
SO_SNDTIMEO int Envoyer timeout.
SO_TYPE int Type de la socket.
IP_OPTIONS Champ de définir les options de l'en-tête IP.

Aperçu de CAsyncSocket |nbsp ; Membres de la classe | Graphique de la hiérarchie

Voir aussi  ;CAsyncSocket::AsyncSelect, CAsyncSocket::Bind, CAsyncSocket::Create, CAsyncSocket::GetSockOpt, CAsyncSocket::IOCtl

Index