WpUCompleteOverlappedRequest, fonction (ws2spi.h)
La fonction WPUCompleteOverlappedRequest effectue une notification d’achèvement des E/S qui se chevauchent pour les opérations d’E/S qui se chevauchent.
Syntaxe
int WPUCompleteOverlappedRequest(
[in] SOCKET s,
[in] LPWSAOVERLAPPED lpOverlapped,
[in] DWORD dwError,
[in] DWORD cbTransferred,
[out] LPINT lpErrno
);
Paramètres
[in] s
Socket de fournisseur de services créé par WPUCreateSocketHandle.
[in] lpOverlapped
Pointeur vers une structure WSAOVERLAPPED associée à l’opération d’E/S superposée dont l’achèvement doit être notifié.
[in] dwError
L’achèvement status de l’opération d’E/S qui se chevauche et dont l’achèvement doit être notifié.
[in] cbTransferred
Nombre d’octets transférés vers ou depuis les mémoires tampons clientes (la direction du transfert dépend de la nature d’envoi ou de réception de l’opération d’E/S superposée dont l’achèvement doit être notifié).
[out] lpErrno
Pointeur vers le code d’erreur résultant de l’exécution de cette fonction.
Valeur retournée
Si aucune erreur ne se produit, WPUCompleteOverlappedRequest retourne zéro et notifie l’achèvement de l’opération d’E/S qui se chevauche en fonction du mécanisme sélectionné par le client (signale un événement trouvé dans la structure WSAOVERLAPPED référencée par lpOverlapped et/ou met en file d’attente un rapport d’achèvement status au port d’achèvement associé au socket si un port d’achèvement est associé). Sinon, WPUCompleteOverlappedRequest retourne SOCKET_ERROR et un code d’erreur spécifique est disponible dans lpErrno.
Code d'erreur | Signification |
---|---|
Le socket passé dans le paramètre s n’est pas un socket créé par WPUCreateSocketHandle. |
Remarques
La fonction WPUCompleteOverlappedRequest effectue une notification d’achèvement d’E/S qui se chevauche pour les opérations d’E/S qui se chevauchent, où le mécanisme d’achèvement spécifié par le client est autre chose que l’appel de procédure asynchrone en mode utilisateur (APC). Cette fonction ne peut être utilisée que pour les handles de socket créés par WPUCreateSocketHandle.
Si le client sélectionne un APC en mode utilisateur comme méthode de notification, le fournisseur de services doit utiliser WPUQueueApc ou une autre fonction de système d’exploitation appropriée pour effectuer la notification d’achèvement. Si le client ne sélectionne pas le mode utilisateur APC, un fournisseur de services qui n’implémente pas directement la fonctionnalité IFS ne peut pas déterminer si le client a associé ou non un port d’achèvement au handle de socket. Par conséquent, il ne peut pas déterminer si la méthode de notification d’achèvement doit mettre en file d’attente un enregistrement d’achèvement status à un port d’achèvement ou signaler un événement trouvé dans la structure WSAOVERLAPPED. L’architecture Windows Socket 2 effectue le suivi de toute association de port d’achèvement avec un socket créé par WPUCreateSocketHandle et peut prendre une décision correcte entre la notification basée sur le port d’achèvement ou la notification basée sur les événements.
Lorsque WPUCompleteOverlappedRequest met en file d’attente une indication d’achèvement, il définit le membre InternalHigh de la structure WSAOVERLAPPED sur le nombre d’octets transférés. Ensuite, il définit le membre Interne sur une valeur dépendante du système d’exploitation autre que la valeur spéciale WSS_OPERATION_IN_PROGRESS. Il peut y avoir un léger délai après le retour de WPUCompleteOverlappedRequest avant l’affichage de ces valeurs, car le traitement peut se produire de manière asynchrone. Toutefois, la valeur InternalHigh (nombre d’octets) est garantie d’être définie au moment où Internal est défini.
WPUCompleteOverlappedRequest fonctionne comme indiqué (effectue la notification d’achèvement comme demandé par le client), que le handle de socket ait été associé ou non à un port d’achèvement.
Interaction avec WSPGetOverlappedResult
Le comportement de WPUCompleteOverlappedRequest impose des contraintes sur la façon dont un fournisseur de services implémente WSPGetOverlappedResult , car seuls les membres Offset et OffsetHigh de la structure WSAOVERLAPPED sont exclusivement contrôlés par le fournisseur de services, mais trois valeurs (nombre d’octets, indicateurs et erreur) doivent être récupérées de la structure par WSPGetOverlappedResult. Un fournisseur de services peut effectuer cette opération de la manière qu’il choisit tant qu’il interagit correctement avec le comportement de WPUCompleteOverlappedRequest . Toutefois, une implémentation classique est la suivante :
- Au début du traitement qui se chevauche, le fournisseur de services définit Interne sur WSS_OPERATION_IN_PROGRESS.
- Une fois l’opération d’E/S terminée, le fournisseur définit OffsetHigh sur le code d’erreur Windows Socket 2 résultant de l’opération, définit Offset sur les indicateurs résultant de l’opération d’E/S et appelle WPUCompleteOverlappedRequest, en passant le nombre d’octets de transfert comme l’un des paramètres. WPUCompleteOverlappedRequest finit par définir InternalHigh sur le nombre d’octets de transfert, puis définit Internal sur une valeur autre que WSS_OPERATION_IN_PROGRESS.
- Lorsque WSPGetOverlappedResult est appelé, le fournisseur de services vérifie Interne. S’il est WSS_OPERATION_IN_PROGRESS, le fournisseur attend le handle d’événement dans le membre hEvent ou retourne une erreur, en fonction du paramètre de l’indicateur FWAIT de WSPGetOverlappedResult. S’il n’est pas en cours ou après l’achèvement de l’attente, le fournisseur retourne les valeurs de InternalHigh, OffsetHigh et Offset en tant que nombre de transferts, code d’erreur de résultat de l’opération et indicateurs respectivement.
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 |