Fonction de rappel LPWSPBIND (ws2spi.h)
La fonction LPWSPBind associe une adresse locale (autrement dit, le nom) à un socket.
Syntaxe
LPWSPBIND Lpwspbind;
int Lpwspbind(
[in] SOCKET s,
[in] const sockaddr *name,
[in] int namelen,
[out] LPINT lpErrno
)
{...}
Paramètres
[in] s
Descripteur identifiant un socket non lié.
[in] name
Adresse à attribuer au socket, sous la forme d’une structure sockaddr .
À l’exception du membre sa_family , le contenu de sockaddr est exprimé dans l’ordre d’octet réseau. Dans Windows Sockets 2, le paramètre name n’est pas strictement interprété comme un pointeur vers une structure sockaddr . Il est casté de cette façon pour la compatibilité Winsock. La structure réelle est interprétée différemment dans le contexte de différentes familles d’adresses. La première u_short est la famille d’adresses et la taille totale de la mémoire tampon, en octets, est namelen.
[in] namelen
Longueur, en octets, de la structure pointée vers le paramètre name .
[out] lpErrno
Pointeur vers le code d’erreur.
Valeur retournée
Si aucune erreur ne se produit, LPWSPBind retourne zéro. Sinon, il retourne SOCKET_ERROR, et un code d’erreur spécifique est disponible dans lpErrno.
Code d'erreur | Signification |
---|---|
Le sous-système réseau a échoué. | |
Certains processus sur l’ordinateur local ont déjà été liés à la même adresse complète (par exemple, l’adresse IP et le port dans le cas **AF_INET**) et le socket n’a pas été marqué pour permettre la réutilisation des adresses avec SO_REUSEADDR. (Consultez l’option de socket SO_REUSEADDR sous LPWSPSetSockOpt.) | |
L’adresse spécifiée n’est pas une adresse valide pour cet ordinateur. | |
Le nom ou le paramètre namelen n’est pas une partie valide de l’espace d’adressage utilisateur, le paramètre namelen est trop petit, le paramètre name contient un format d’adresse incorrect pour la famille d’adresses associée, ou les deux premiers octets du bloc de mémoire spécifié par nom ne correspondent pas à la famille d’adresses associée au descripteur de socket s. | |
La fonction est appelée lorsqu’un rappel est en cours. | |
Le socket est déjà lié à une adresse. | |
Il n’y a pas assez de mémoires tampons disponibles, il y a trop de connexions. | |
Le descripteur n’est pas un socket. |
Remarques
La fonction LPWSPBind est utilisée sur un socket non connecté ou orienté connexion, avant les appels suivants aux fonctions LPWSPConnect ou LPWSPListen . Lorsqu’un socket est créé avec LPWSPSocket, il existe dans un espace de noms (famille d’adresses), mais aucun nom ou adresse locale n’est attribué. La fonction LPWSPBind établit l’association locale du socket en affectant un nom local à un socket sans nom.
Par exemple, dans la famille d’adresses Internet, un nom se compose de trois parties : la famille d’adresses, une adresse d’hôte et un numéro de port qui identifie le client Winsock SPI. Dans Windows Sockets 2, le paramètre name n’est pas strictement interprété comme un pointeur vers une structure sockaddr . Les fournisseurs de services sont libres de le considérer comme un pointeur vers un bloc de mémoire de taille namelen. Les deux premiers octets de ce bloc (correspondant à sa_family dans la déclaration sockaddr ) doivent contenir la famille d’adresses utilisée pour créer le socket. Sinon, l’erreur WSAEFAULT sera indiquée.
Si un client SPI Windows Sockets 2 ne se soucie pas de l’adresse locale qui lui est affectée, il spécifie la valeur de constante manifeste ADDR_ANY pour le membre sa_data du paramètre name . Cela indique au fournisseur de services d’utiliser toute adresse réseau appropriée. Pour TCP/IP, si le port est spécifié sur zéro, le fournisseur de services affecte un port unique au client Winsock SPI avec une valeur comprise entre 1024 et 5 000. Le client SPI peut utiliser LPWSPGetSockName après LPWSPBind pour connaître l’adresse et le port qui lui a été affecté. Toutefois, notez que si l’adresse Internet est égale à INADDR_ANY, LPWSPGetSockOpt ne sera pas nécessairement en mesure de fournir l’adresse tant que le socket n’est pas connecté, car plusieurs adresses peuvent être valides si l’hôte est multi-hébergement.
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] |
En-tête | ws2spi.h |