Partager via


PFN_WSK_DISCONNECT fonction de rappel (wsk.h)

La fonction WskDisconnect déconnecte un socket orienté connexion ou de flux d’une adresse de transport distante.

Syntaxe

PFN_WSK_DISCONNECT PfnWskDisconnect;

NTSTATUS PfnWskDisconnect(
  [in]           PWSK_SOCKET Socket,
  [in, optional] PWSK_BUF Buffer,
  [in]           ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

Paramètres

[in] Socket

Pointeur vers une structure de WSK_SOCKET qui spécifie l’objet socket pour le socket en cours de déconnexion.

[in, optional] Buffer

Pointeur vers une structure WSK_BUF . Cette structure décrit une mémoire tampon de données qui contient des données à transmettre par le sous-système WSK à l’adresse de transport distante avant que le socket ne soit déconnecté. S’il n’y a pas de telles données à transmettre, l’application WSK définit ce pointeur sur NULL. Si WSK_FLAG_ABORTIVE est spécifié dans le paramètre Flags , le paramètre Buffer doit avoir la valeur NULL.

[in] Flags

Valeur ULONG qui contient l’indicateur suivant, ou zéro :

WSK_FLAG_ABORTIVE

Indique au sous-système WSK d’effectuer une déconnexion avortée du socket. Si une application WSK ne spécifie pas cet indicateur, le sous-système WSK effectue une déconnexion normale du socket.

[in, out] Irp

Pointeur vers un IRP alloué à l’appelant que le sous-système WSK utilise pour terminer l’opération de déconnexion de manière asynchrone. Pour plus d’informations sur l’utilisation des irps avec des fonctions WSK, consultez Utilisation des irps avec les fonctions du noyau Winsock.

Valeur retournée

WskDisconnect retourne l’un des codes NTSTATUS suivants :

Code de retour Description
STATUS_SUCCESS
Le socket a été correctement déconnecté de l’adresse de transport distante. Le IRP sera terminé avec succès status.
STATUS_PENDING
Le sous-système WSK n’a pas pu déconnecter le socket immédiatement. Le sous-système WSK termine l’IRP une fois qu’il a déconnecté le socket de l’adresse de transport distante. Le status de l’opération de déconnexion sera retourné dans le champ IoStatus.Status de l’IRP.
STATUS_FILE_FORCED_CLOSED
Le socket n’est plus fonctionnel. L’IRP sera terminé avec l’échec status. L’application WSK doit appeler la fonction WskCloseSocket pour fermer le socket dès que possible.
Autres codes status
Une erreur est survenue. L’IRP sera terminé avec l’échec status.

Remarques

Une application WSK peut appeler la fonction WskDisconnect uniquement sur un socket orienté connexion ou de flux qu’elle a précédemment connecté à une adresse de transport distante ou sur un socket qu’elle a accepté sur un socket d’écoute.

WskDisconnect oblige le sous-système WSK à notifier l’adresse de transport distante, par tous les moyens appropriés pour le transport sous-jacent, que la connexion est déconnectée. Si le paramètre Buffer n’a pas la valeur NULL, le sous-système WSK transmet les données de la mémoire tampon à l’adresse de transport distante avant de déconnecter le socket.

Si une déconnexion normale est effectuée, le sous-système WSK attend que toutes les données de transmission en attente soient envoyées avant de déconnecter le socket. Une fois le socket déconnecté, l’application WSK ne peut pas envoyer de données supplémentaires à l’adresse de transport distante. Toutefois, l’application WSK peut toujours recevoir des données supplémentaires à partir de l’adresse de transport distante jusqu’à ce que l’application distante déconnecte sa fin du socket.

Notez que tous les transports ne prennent pas en charge les connexions semi-ouvertes. Si un transport ne prend pas en charge les connexions semi-ouvertes, l’application WSK ne recevra pas de données supplémentaires de l’adresse de transport distante après une déconnexion normale.

Avec une déconnexion normale, l’IRP n’est terminé que lorsque l’opération de déconnexion est entièrement terminée par le protocole de transport. Pour certains protocoles de transport, l’IRP peut ne pas se terminer en cas de problème de transmission des données à l’adresse de transport distante. Dans ce cas, l’application WSK peut récupérer en appelant à nouveau la fonction WskDisconnect et en spécifiant l’indicateur WSK_FLAG_ABORTIVE ou en appelant la fonction WskCloseSocket . Dans les deux cas, le sous-système WSK déconnecte de manière abandonnée le socket et force l’achèvement de l’IRP en attente.

Si une déconnexion avortée est effectuée, le sous-système WSK annule toutes les opérations de transmission en cours et en attente et n’attend pas pour déconnecter le socket. Après une déconnexion abandonnée, l’application WSK ne peut pas envoyer de données supplémentaires à l’adresse de transport distante ou recevoir des données supplémentaires de l’adresse de transport distante.

Une application WSK peut fermer complètement la connexion en appelant la fonction WskCloseSocket .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Universal
En-tête wsk.h (inclure Wsk.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect