Fonction WSARecvDisconnect (winsock2.h)

La fonction WSARecvDisconnect arrête la réception sur un socket et récupère les données de déconnexion si le socket est orienté connexion.

Syntaxe

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

Paramètres

[in] s

Descripteur identifiant un socket.

[out] lpInboundDisconnectData

Pointeur vers les données de déconnexion entrantes.

Valeur retournée

Si aucune erreur ne se produit, WSARecvDisconnect retourne zéro. Sinon, une valeur de SOCKET_ERROR est retournée et un code d’erreur spécifique peut être récupéré en appelant WSAGetLastError.

Code d'erreur Signification
WSANOTINITIALISED
Un appel WSAStartup réussi doit se produire avant d’utiliser cette fonction.
WSAENETDOWN
Le sous-système réseau a échoué.
WSAEFAULT
La mémoire tampon référencée par le paramètre lpInboundDisconnectData est trop petite.
WSAENOPROTOOPT
Les données de déconnexion ne sont pas prises en charge par la famille de protocoles indiquée. Notez que les implémentations de TCP/IP qui ne prennent pas en charge les données de déconnexion ne sont pas nécessaires pour retourner le code d’erreur WSAENOPROTOOPT. Pour plus d’informations sur l’implémentation Microsoft de TCP/IP, consultez la section remarques.
WSAEINPROGRESS
Un appel bloquant Windows Sockets 1.1 est en cours ou le fournisseur de services traite toujours une fonction de rappel.
WSAENOTCONN
Le socket n’est pas connecté (sockets orientés connexion uniquement).
WSAENOTSOCK
Le descripteur n’est pas un socket.

Remarques

La fonction WSARecvDisconnect est utilisée sur les sockets orientés connexion pour désactiver la réception et récupérer les données de déconnexion entrantes de la partie distante. Cela équivaut à un arrêt (SD_RECEIVE), sauf que WSARecvDisconnect permet également la réception des données de déconnexion (dans les protocoles qui les prennent en charge).

Une fois cette fonction correctement émise, les réceptions suivantes sur le socket sont interdites. L’appel de WSARecvDisconnect n’a aucun effet sur les couches de protocole inférieures. Pour les sockets TCP, si des données sont toujours en file d’attente sur le socket en attente d’être reçues ou si des données arrivent par la suite, la connexion est réinitialisée, car les données ne peuvent pas être remises à l’utilisateur. Pour UDP, les datagrammes entrants sont acceptés et mis en file d’attente. En aucun cas, un paquet d’erreur ICMP ne sera généré.

Note L’implémentation native de TCP/IP sur Windows ne prend pas en charge les données de déconnexion. Les données de déconnexion sont uniquement prises en charge avec les fournisseurs Windows Sockets qui ont l’indicateur XP1_DISCONNECT_DATA dans leur structure WSAPROTOCOL_INFO . Utilisez la fonction WSAEnumProtocols pour obtenir WSAPROTOCOL_INFO structures pour tous les fournisseurs installés.
 
Pour recevoir correctement les données de déconnexion entrantes, une application doit utiliser d’autres mécanismes pour déterminer que le circuit a été fermé. Par exemple, une application doit recevoir une notification FD_CLOSE, recevoir une valeur de retour zéro ou recevoir un code d’erreur WSAEDISCON ou WSAECONNRESET de la part de recv/WSARecv.

La fonction WSARecvDisconnect ne ferme pas le socket et les ressources attachées au socket ne sont pas libérées tant que closesocket n’est pas appelé.

La fonction WSARecvDisconnect ne bloque pas, quel que soit le paramètre SO_LINGER sur le socket.

Une application ne doit pas compter sur la possibilité de réutiliser un socket une fois qu’elle a été déconnectée à l’aide de WSARecvDisconnect. En particulier, un fournisseur de sockets Windows n’est pas nécessaire pour prendre en charge l’utilisation de la connexion ou de WSAConnect sur un tel socket.

Note Lors de l’émission d’un appel Winsock bloquant tel que WSARecvDisconnect, Winsock peut avoir besoin d’attendre un événement réseau avant que l’appel puisse se terminer. Winsock effectue une attente alertable dans cette situation, qui peut être interrompue par un appel de procédure asynchrone (APC) planifié sur le même thread. L’émission d’un autre appel Winsock bloquant à l’intérieur d’un APC qui a interrompu un appel Winsock bloquant en cours sur le même thread entraîne un comportement non défini et ne doit jamais être tenté par les clients Winsock.
 

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 winsock2.h
Bibliothèque Ws2_32.lib
DLL Ws2_32.dll

Voir aussi

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Fonctions Winsock

Informations de référence sur Winsock

closesocket

connect

socket