Fonction de rappel LPWSPACCEPT (ws2spi.h)
La fonction LPWSPAccept accepte conditionnellement une connexion en fonction de la valeur de retour d’une fonction de condition.
Syntaxe
LPWSPACCEPT Lpwspaccept;
SOCKET Lpwspaccept(
[in] SOCKET s,
[out] sockaddr *addr,
[in, out] LPINT addrlen,
[in] LPCONDITIONPROC lpfnCondition,
[in] DWORD_PTR dwCallbackData,
[out] LPINT lpErrno
)
{...}
Paramètres
[in] s
Descripteur identifiant un socket qui écoute les connexions après un LPWSPListen.
[out] addr
Pointeur facultatif vers une mémoire tampon qui reçoit l’adresse de l’entité de connexion, comme connu pour le fournisseur de services. Le format exact du paramètre de du module complémentaire
[in, out] addrlen
Pointeur facultatif vers un entier qui contient la longueur du paramètre addr
[in] lpfnCondition
Adresse d’instance de procédure d’une fonction de condition facultative fournie par Windows Sockets. Cette fonction est utilisée dans la décision d’acceptation ou de rejet en fonction des informations de l’appelant transmises en tant que paramètres.
[in] dwCallbackData
Les données de rappel à transmettre au client Windows Socket 2 en tant que valeur du paramètre dwCallbackData de la fonction de condition. Ce paramètre n’est pas interprété par le fournisseur de services.
[out] lpErrno
Pointeur vers le code d’erreur.
Valeur de retour
Si aucune erreur ne se produit, LPWSPAccept retourne une valeur de type SOCKET qui est un descripteur pour le socket accepté. Sinon, une valeur de INVALID_SOCKET est retournée et un code d’erreur spécifique est disponible dans lpErrno.
Code d’erreur | Signification |
---|---|
La demande de connexion a été rejetée avec force, comme indiqué dans la valeur de retour de la fonction de condition (CF_REJECT). | |
Une connexion entrante a été indiquée, mais a été arrêtée par l’homologue distant avant d’accepter l’appel. | |
Le sous-système réseau a échoué. | |
Le paramètre addrlen |
|
Un appel (bloquant) a été annulé via LPWSPCancelBlockingCall. | |
Un appel Windows Sockets bloquant est en cours. | |
LPWSPListen n’a pas été appelé avant LPWSPAccept, paramètre g spécifié dans la fonction de condition n’est pas une valeur valide, la valeur de retour de la fonction condition n’est pas valide, ou tout cas où le socket spécifié est dans un état non valide. | |
La file d’attente n’est pas vide lors de l’entrée à LPWSPAccept et aucun descripteur de socket n’est disponible. | |
Aucun espace tampon n’est disponible. | |
Le descripteur n’est pas un socket. | |
Le socket référencé n’est pas un type qui prend en charge le service orienté connexion. | |
L’acceptation de la demande de connexion a été différée, comme indiqué dans la valeur de retour de la fonction de condition (CF_DEFER). | |
Le socket est marqué comme non bloquant et aucune connexion n’est présente pour être acceptée. | |
La demande de connexion qui a été proposée a expiré ou a été retirée. |
Remarques
La fonction
Les sockets nouvellement créés ont les mêmes propriétés que lesdu socket
Si la fonction de condition retourne CF_REJECT, LPWSPAccept rejette la demande de connexion. Si la décision d’acceptation/rejet de l’application ne peut pas être prise immédiatement, la fonction condition retourne CF_DEFER pour indiquer qu’aucune décision n’a été prise. Aucune action concernant cette demande de connexion ne doit être effectuée par le fournisseur de services. Lorsque l’application est prête à prendre des mesures sur la demande de connexion, elle appelle LPWSPAccept à nouveau et retourne CF_ACCEPT ou CF_REJECT comme valeur de retour de la fonction de condition.
Pour les sockets qui se trouvent en mode de blocage (par défaut), si aucune connexion en attente n’est présente dans la file d’attente, LPWSPAc cept bloque l’appelant jusqu’à ce qu’une connexion soit présente. Pour les sockets en mode non bloquant, si cette fonction est appelée lorsqu’aucune connexion en attente n’est présente dans la file d’attente, LPWSPAccept retourne le code d’erreur WSAEWOULDBLOCK. Le socket accepté ne peut pas être utilisé pour accepter davantage de connexions. Le socket d’origine reste ouvert.
Le paramètre addr est un paramètre de résultat rempli avec l’adresse de l’entité de connexion, comme connu pour le fournisseur de services. Le format exact du paramètre addr est déterminé par la famille d’adresses dans laquelle la communication se produit. Le addrlen
Le prototype de la fonction de condition est le suivant.
int CALLBACK
ConditionFunc(
IN LPWSABUF lpCallerId,
IN LPWSABUF lpCallerData,
IN OUT LPQOS lpSQOS,
IN OUT LPQOS lpGQOS,
IN LPWSABUF lpCalleeId,
IN LPWSABUF lpCalleeData,
OUT GROUP FAR * g,
IN DWORD_PTR dwCallbackData
);
Les lpCallerId et lpCallerData sont des paramètres de valeur qui doivent contenir l’adresse de l’entité de connexion et toutes les données utilisateur envoyées avec la demande de connexion. Si aucune donnée d’appelant ou d’appelant n’est disponible, le paramètre correspondant est null. De nombreux protocoles réseau ne prennent pas en charge les données d’appelant au moment de la connexion. La plupart des protocoles réseau conventionnels peuvent être censés prendre en charge les informations d’identificateur de l’appelant au moment de la demande de connexion. La partie
Le paramètre
L'lpCalleeId est un paramètre de valeur qui contient l’adresse locale de l’entité connectée. La partie
L'lpCalleeData est un paramètre de résultat utilisé par la fonction condition pour fournir des données utilisateur à l’entité de connexion. Le stockage de ces données doit être fourni par le fournisseur de services. Le lpCalleeData->len contient initialement la longueur de la mémoire tampon allouée par le fournisseur de services et pointée par lpCalleeData->buf . La valeur zéro signifie que le passage de données utilisateur à l’appelant n’est pas pris en charge. La fonction de condition copie jusqu’à lpCalleeData-> octets de données dans lpCalleeData->buf, puis mettez à jour lpCalleeData->len pour indiquer le nombre réel d’octets transférés. Si aucune donnée utilisateur n’est transmise à l’appelant, la fonction de condition définit lpCalleeData->len sur zéro. Le format de toutes les données d’adresse et d’utilisateur est spécifique à la famille d’adresses à laquelle appartient le socket.
La valeur du paramètre dwCallbackData
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
serveur minimum pris en charge | Windows 2000 Server [applications de bureau uniquement] |
plateforme cible | Windows |
d’en-tête | ws2spi.h |