CAsyncSocket::SetSockOpt
Appelez la fonction membre pour définir une option de socket.
BOOL SetSockOpt(
int nOptionName,
const void* lpOptionValue,
int nOptionLen,
int nLevel = SOL_SOCKET
);
Paramètres
nOptionName
L'option de socket pour laquelle la valeur doit être définie.lpOptionValue
Un pointeur vers une mémoire tampon dans laquelle la valeur de l'option demandée est fournie.nOptionLen
La taille de la mémoire tampon d' lpOptionValue en octets.nLevel
Le niveau auquel l'option est définie ; les seuls niveaux pris en charge sont SOL_SOCKET et IPPROTO_TCP.
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é.
WSAEFAULT lpOptionValue n'est pas une partie valide de l'espace d'adressage du processus.
WSAEINPROGRESS se bloque l'exécution de Windows Sockets est en cours.
WSAEINVAL nLevel est pas valide, ou les informations dans lpOptionValue sont pas valides.
La connexion deWSAENETRESET a expiré lorsque SO_KEEPALIVE est défini.
WSAENOPROTOOPT L'option est inconnu ou non pris en charge. En particulier, SO_BROADCAST n'est pas pris en charge sur les sockets de type SOCK_STREAM, tandis que SO_DONTLINGER, SO_KEEPALIVE, SO_LINGER, et SO_OOBINLINE ne sont pas pris en charge sur les sockets de type SOCK_DGRAM.
La connexion deWSAENOTCONN a été réinitialisation lorsque SO_KEEPALIVE est défini.
WSAENOTSOCK le modèle n'est pas un socket.
Notes
SetSockOpt définit la valeur actuelle d'une option de socket associée à un socket de tout type, dans un état. Bien que les options peuvent exister dans plusieurs niveaux de protocole, cette spécification définit uniquement les options qui existent au niveau de « socket le plus élevé ». Opérations de socket d'affectent les options, telles que si les données express est reçue dans le flux de données normal, si des messages de distribution peuvent être envoyés du socket, et ainsi de suite.
Il existe deux types d'options de socket : Booléennes options qui activent ou désactivent une configuration ou un comportement, et options qui requièrent une valeur entière ou la structure. Pour activer une option booléenne, points d' lpOptionValue à un entier différent de zéro. Pour désactiver les points d' lpOptionValue d'option à un entier égal à zéro. nOptionLen doit être égal à sizeof(BOOL) pour les options booléennes. Pour d'autres options, points d' lpOptionValue en entier ou la structure qui contiennent la valeur souhaitée pour l'option, puis nOptionLen est la longueur de l'entier ou de la structure.
SO_LINGER contrôle l'action effectuée lorsque des données non envoyées sont mises en file d'attente sur un socket et la fonction de Fermer est appelée pour fermer le socket.
Par défaut, un socket ne peut pas être lié (consultez Bind) à une adresse locale est déjà utilisé. Occasionnellement, toutefois, il peut être souhaitable « de » réutiliser une adresse de cette façon. Étant donné que chaque connexion est identifiée par la combinaison des adresses locales et distantes, il n'existe aucun problème avec avoir deux sockets liés à la même adresse locale tant que les adresses distantes sont différentes.
Pour informer l'implémentation de Windows Sockets qu'un appel de Liaison à un socket ne doit pas être rejeté car l'adresse souhaitée est déjà utilisé par un autre douille, l'application doit définir l'option de socket de SO_REUSEADDR du socket avant d'émettre l'appel de Liaison . Notez que l'option est interprétée uniquement au moment de l'appel de Liaison : il est donc inutile (mais aucun danger) de définir l'option dans un socket qui ne doit pas être lié à une adresse existante, et définir ou de réinitialiser l'option après l'appel de Liaison n'a aucun effet sur cette ou toute autre douille.
Une application peut demander que l'implémentation de Windows Sockets permettent l'utilisation des paquets « conserver- actifs » sur les connexions de (TCP) de protocole TCP en en activant l'option de socket de SO_KEEPALIVE . Une implémentation de Windows Sockets n'a pas besoin de prendre en charge l'utilisation de conserver - alives : si tel est le cas, la sémantique exacte sont à l'implémentation mais doivent se conformer à 4.2.3.6 section RFC 1122 : « Spécifications pour les hôtes Internet (couche de communication. » Si une connexion est supprimée grâce à « conservez - alives » code d'erreur WSAENETRESET est retourné à tous les appels en cours sur le socket, et tous les appels suivants échoueront avec WSAENOTCONN.
l'option de TCP_NODELAY désactive l'algorithme de Nagle. L'algorithme de Nagle est utilisé pour réduire le nombre de petites packs envoyés par un hôte par la mise en mémoire tampon non reconnue envoyer des données jusqu'à ce qu'un à en-tête pack normal puisse être envoyé. Toutefois, étant donné que certaines applications cet algorithme peuvent empêcher les performances, et TCP_NODELAY peut être utilisé pour la désactiver. Les writers d'application ne doivent pas définir TCP_NODELAY à moins que l'impact de cela bien- soit incluse et souhaitée, étant donné que la définition de TCP_NODELAY peut avoir un impact négatif sur les performances significative réseau. TCP_NODELAY est la seule option de socket prise en charge qui utilise IPPROTO_TCPde niveau ; un autre niveau SOL_SOCKETd'utilisation d'options.
Certaines implémentations des informations de débogage de sortie d'approvisionnement Windows Sockets si l'option de 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é par lpOptionValue.
Valeur |
Type |
Signification |
---|---|---|
SO_BROADCAST |
BOOL |
Permettre la communication des messages de diffusion du socket. |
SO_DEBUG |
BOOL |
Enregistrer les informations de débogage. |
SO_DONTLINGER |
BOOL |
Ne blocages pas Fermer attendent des données non envoyées à envoyer. La définition de cette option revient à définir SO_LINGER avec l_onoff a la valeur zéro. |
SO_DONTROUTE |
BOOL |
Routez ne pas : envoyer directement à l'interface. |
SO_KEEPALIVE |
BOOL |
Send conservent-alives. |
SO_LINGER |
la structure S'ATTARDENT |
Attardez-vous sur Fermer si les données non envoyées sont présentes. |
SO_OOBINLINE |
BOOL |
Acceptez les données hors bande dans le flux de données normal. |
SO_RCVBUF |
int |
Spécifiez la taille de la mémoire tampon de reçoit. |
SO_REUSEADDR |
BOOL |
Autorisez le socket à lier à une adresse est déjà utilisé. (Consultez Bind.) |
SO_SNDBUF |
int |
Spécifiez la taille de mémoire tampon de les envoyer. |
TCP_NODELAY |
BOOL |
Désactive l'algorithme Nagle pour la fusion des envois. |
Les options de Distribution Berkeley Software (BSD) non prises en charge pour SetSockOpt sont :
Valeur |
Type |
Signification |
---|---|---|
SO_ACCEPTCONN |
BOOL |
Le socket écoute |
SO_ERROR |
int |
Mode et effacez d'erreur get. |
SO_RCVLOWAT |
int |
Acceptez la limite inférieure. |
SO_RCVTIMEO |
int |
Acceptez le délai d'attente |
SO_SNDLOWAT |
int |
Envoyez la limite inférieure. |
SO_SNDTIMEO |
int |
Envoyez le délai d'attente. |
SO_TYPE |
int |
Type de socket. |
IP_OPTIONS |
|
Définissez le champ d'options dans l'en-tête IP. |
Configuration requise
Header: afxsock.h