Share via


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
WSAENETDOWN
Le sous-système réseau a échoué.
WSAEADDRINUSE
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.)
WSAEADDRNOTAVAIL
L’adresse spécifiée n’est pas une adresse valide pour cet ordinateur.
WSAEFAULT
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.
WSAEINPROGRESS
La fonction est appelée lorsqu’un rappel est en cours.
WSAEINVAL
Le socket est déjà lié à une adresse.
WSAENOBUFS
Il n’y a pas assez de mémoires tampons disponibles, il y a trop de connexions.
WSAENOTSOCK
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

Voir aussi

sockaddr

LPWSPConnect

LPWSPGetSockName

LPWSPListen

WSPSetSockOpt

LPWSPSocket