Share via


Fonction de rappel LPWSPSOCKET (ws2spi.h)

La fonction LPWSPSocket crée un socket. Pour plus d’informations sur le rôle joué par LPWSPSocket dans la création d’un socket partagé, consultez Sockets partagés et sockets partagés dans le SPI.

Syntaxe

LPWSPSOCKET Lpwspsocket;

SOCKET Lpwspsocket(
  [in]  int af,
  [in]  int type,
  [in]  int protocol,
  [in]  LPWSAPROTOCOL_INFOW lpProtocolInfo,
  [in]  GROUP g,
        DWORD dwFlags,
  [out] LPINT lpErrno
)
{...}

Paramètres

[in] af

Spécification de la famille d’adresses.

[in] type

Spécification de type pour le nouveau socket.

[in] protocol

Protocole à utiliser avec le socket spécifique à la famille d’adresses indiquée.

[in] lpProtocolInfo

Pointeur vers une structure WSAProtocol_Info qui définit les caractéristiques du socket à créer.

[in] g

Réservé.

dwFlags

Spécification de l’attribut socket.

[out] lpErrno

Pointeur vers le code d’erreur.

Valeur retournée

Si aucune erreur ne se produit, LPWSPSocket retourne un descripteur référençant le nouveau socket. Sinon, une valeur de INVALID_SOCKET est retournée et un code d’erreur spécifique est disponible dans lpErrno.

Code d'erreur Signification
WSAENETDOWN
Le sous-système réseau a échoué.
WSAEAFNOSUPPORT
La famille d’adresses spécifiée n’est pas prise en charge.
WSAEINPROGRESS
Le blocage de l’appel Windows Sockets est en cours ou le fournisseur de services traite toujours une fonction de rappel.
WSAEMFILE
Aucun descripteur de socket supplémentaire n'est disponible.
WSAENOBUFS
Aucune zone tampon disponible. Impossible de créer le socket.
WSAEPROTONOSUPPORT
Le protocole spécifié n'est pas pris en charge.
WSAEPROTOTYPE
Le protocole spécifié est le type incorrect pour ce socket.
WSAESOCKTNOSUPPORT
Le type de socket spécifié n’est pas pris en charge dans cette famille d’adresses.
WSAEINVAL
Le paramètre g spécifié n’est pas valide.
 

Remarques

La fonction LPWSPSocket entraîne l’allocation d’un descripteur de socket et de toutes les ressources associées. Par défaut, le socket créé n’a pas l’attribut qui se chevauche. Les fournisseurs Windows Sockets sont encouragés à être réalisés en tant que systèmes de fichiers installables Windows et à fournir des descripteurs de fichiers système en tant que descripteurs de socket. Ces fournisseurs doivent appeler WPUModifyIFSHandle avant de revenir à partir de cette fonction. Pour les fournisseurs Windows Sockets sans système de fichiers, WPUCreateSocketHandle doit être utilisé pour acquérir un descripteur de socket unique à partir du Ws2_32.dll avant de revenir à partir de cette fonction. Consultez
Allocation de descripteur pour plus d’informations.

Les valeurs pour af, type et protocole sont celles fournies par l’application dans le socket de fonctions d’API ou WSASocket correspondant. Un fournisseur de services est libre d’ignorer ou de prêter attention à l’une ou à l’ensemble de ces valeurs, selon ce qui est approprié pour le protocole particulier. Toutefois, le fournisseur doit être prêt à accepter la valeur zéro pour af et type, car le Ws2_32.dll les considère comme des valeurs génériques. En outre, la valeur de la constante manifeste FROM_PROTOCOL_INFO doit être acceptée pour n’importe quel af, type et protocole. Cette valeur indique que l’application Windows Sockets 2 doit utiliser les valeurs correspondantes de la structure WSAProtocol_Info (iAddressFamily, iSocketType, iProtocol).

Le paramètre dwFlags peut être utilisé pour spécifier les attributs du socket à l’aide de l’opérateur OR au niveau du bit avec l’un des indicateurs suivants.

Indicateur Signification
WSA_FLAG_OVERLAPPED Cet indicateur entraîne la création d’un socket superposé. Les sockets qui se chevauchent peuvent utiliser LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFrom et LPWSPIoctl pour les opérations d’E/S qui se chevauchent, ce qui permet d’initier et de traiter simultanément plusieurs opérations. Toutes les fonctions qui autorisent les opérations qui se chevauchent prennent également en charge l’utilisation non superposée sur un socket qui se chevauche si les valeurs des paramètres liés à l’opération qui se chevauchent sont null.
WSA_FLAG_MULTIPOINT_C_ROOT Indique que le socket créé sera un c_root dans une session multipoint. Autorisé uniquement si un plan de contrôle rooté est indiqué dans la structure WSAProtocol_Info du protocole.
WSA_FLAG_MULTIPOINT_C_LEAF Indique que le socket créé sera un c_leaf dans une session de multidiffusion. Autorisé uniquement si XP1_SUPPORT_MULTIPOINT est indiqué dans la structure WSAProtocol_Info du protocole.
WSA_FLAG_MULTIPOINT_D_ROOT Indique que le socket créé sera un d_root dans une session multipoint. Autorisé uniquement si un plan de données rooté est indiqué dans la structure WSAProtocol_Info du protocole.
WSA_FLAG_MULTIPOINT_D_LEAF Indique que le socket créé sera un d_leaf dans une session multipoint. Autorisé uniquement si XP1_SUPPORT_MULTIPOINT est indiqué dans la structure WSAProtocol_Info du protocole.

Notes

Pour les sockets multipoints, vous devez spécifier exactement un WSA_FLAG_MULTIPOINT_C_ROOT ou WSA_FLAG_MULTIPOINT_C_LEAF, et exactement l’un des WSA_FLAG_MULTIPOINT_D_ROOT ou WSA_FLAG_MULTIPOINT_D_LEAF doit être spécifié. Pour plus d’informations, consultez Multidiffusion indépendante du protocole et Multipoint dans spi .

Les sockets orientés connexion, tels que les SOCK_STREAM fournissent des connexions duplex complètes, et doivent être dans un état connecté avant que des données puissent être envoyées ou reçues sur eux. Une connexion à un autre socket est créée avec un appel LPWSPConnect . Une fois connectées, les données peuvent être transférées à l’aide d’appels LPWSPSend et LPWSPRecv . Lorsqu’une session est terminée, un LPWSPCloseSocket doit être effectué.

Les protocoles de communication utilisés pour implémenter un socket fiable orienté connexion garantissent que les données ne sont pas perdues ou dupliquées. Si les données pour lesquelles le protocole homologue dispose d’un espace de mémoire tampon ne peuvent pas être transmises correctement dans un délai raisonnable, la connexion est considérée comme interrompue et les appels suivants échouent avec le code d’erreur défini sur WSAETIMEDOUT.

Les sockets orientés message sans connexion permettent l’envoi et la réception de datagrammes vers et depuis des homologues arbitraires à l’aide de LPWSPSendTo et LPWSPRecvFrom. Si un tel socket est connecté à l’aide de LPWSPConnect à un homologue spécifique, les datagrammes peuvent être envoyés à cet homologue à l’aide de LPWSPSend et peuvent être reçus (uniquement) de cet homologue à l’aide de LPWSPRecv.

La prise en charge des sockets de type SOCK RAW n’est pas requise, mais les fournisseurs de services sont encouragés à prendre en charge les sockets bruts chaque fois qu’il est judicieux de le faire.

Un fournisseur de services en couches fournit une implémentation de cette fonction, mais il est également un client de cette fonction si et quand il appelle LPWSPSocket de la couche suivante dans la chaîne de protocole. Certaines considérations particulières s’appliquent au paramètre lpProtocolInfo de cette fonction, car il est propagé vers le bas dans les couches de la chaîne de protocole.

Si la couche suivante de la chaîne de protocole est une autre couche, lorsque le LPWSPSocket de la couche suivante est appelé, cette couche doit passer à la couche suivante un lpProtocolInfo qui fait référence à la même structure de WSAProtocol_Info non modifiée avec les mêmes informations de chaîne non modifiées. Toutefois, si la couche suivante est le protocole de base (c’est-à-dire le dernier élément de la chaîne), cette couche effectue une substitution lors de l’appel du LPWSPSocket du fournisseur de base. Dans ce cas, la structure WSAPROTOCOL_INFO du fournisseur de base doit être référencée par le paramètre lpProtocolInfo .

L’un des avantages essentiels de cette stratégie est que les fournisseurs de services de base n’ont pas à connaître les chaînes de protocoles.

Cette même stratégie de propagation s’applique lors de la propagation d’une structure de WSAProtocol_Info via une séquence en couches d’autres fonctions telles que LPWSPAddressToString, LPWSPDuplicateSocket, WSPStartup ou LPWSPStringToAddress.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête ws2spi.h

Voir aussi