Partager via


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

Voir aussi

Référence

Classe de CAsyncSocket

Graphique de la hiérarchie

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl