Partager via


CAsyncSocket::Receive

Appelez la fonction membre pour recevoir les données d'un socket.

virtual int Receive( 
   void* lpBuf, 
   int nBufLen, 
   int nFlags = 0  
);

Paramètres

  • lpBuf
    Une mémoire tampon pour les données entrantes.

  • nBufLen
    La longueur d' lpBuf en octets.

  • nFlags
    Spécifie la façon dont l'appel est passé. La sémantique de cette fonction sont déterminées par les options de socket et le paramètre d' nFlags . Ce dernier est construit en combinant l'un des valeurs avec l'opérateur C++ OR :

    • Coup d'œil deMSG_PEEK sur les données entrantes. Les données sont copiées dans la mémoire tampon mais ne sont pas supprimées de la file d'attente d'entrée.

    • Données hors bande de processus deMSG_OOB .

Valeur de retour

Si aucune erreur ne se produit, Recevoir retourne le nombre d'octets envoyés. Si la connexion a été fermée, elle retourne 0. Sinon, une valeur de SOCKET_ERROR est retournée, et le code d'erreur spécifique peut être récupéré en appelant GetLastError. Les erreurs suivantes s'appliquent à cette fonction membre :

  • WSANOTINITIALISED A réussi AfxSocketInit doit se produire avant d'utiliser cette API.

  • WSAENETDOWN que l'implémentation de Windows Sockets l'a détecté que le sous-système réseau a échoué.

  • WSAENOTCONN le socket n'est pas connecté.

  • WSAEINPROGRESS se bloque l'exécution de Windows Sockets est en cours.

  • WSAENOTSOCK le modèle n'est pas un socket.

  • WSAEOPNOTSUPP   MSG_OOB a été spécifié, mais le socket n'est pas de type SOCK_STREAM.

  • WSAESHUTDOWN le socket a été arrêté ; il n'est pas possible d'appeler Recevoir sur un socket après ShutDown a été appelé avec nHow affectez la valeur 0 ou 2.

  • WSAEWOULDBLOCK le socket est marqué comme non bloquant et l'exécution de Recevoir se bloquerait.

  • WSAEMSGSIZE Le datagramme est trop grand pour s'insérer dans la mémoire tampon spécifiée et a été tronqué.

  • WSAEINVAL le socket n'a pas été lié avec Liaison.

  • LeWSAECONNABORTED VC a été suspendu en raison de délai d'attente ou autre échec.

  • LeWSAECONNRESET VC a été réinitialisé par la partie distant.

Notes

Cette fonction est utilisée pour le flux connecté ou sockets datagramme et est utilisée pour lire les données entrantes.

Pour les sockets de type SOCK_STREAM, autant d'informations que est disponible jusqu'à la taille de la mémoire tampon fournie sont retournées. Si le socket a été configuré pour la réception intégrée des données hors bande option de socket SO_OOBINLINE) et les données hors bande sont non lues, seuls les données hors bande seront retournées. l'application peut utiliser l'option ou OnOutOfBandData d' IOCtlSIOCATMARK de déterminer si plus de données hors bande restent à lire.

Pour les sockets datagramme, les données sont extraites du premier datagramme mis en file d'attente, jusqu'à la taille de la mémoire tampon fournie. Si le datagramme est plus grande que la mémoire tampon fournie, la mémoire tampon est remplie avec la première partie du datagramme, les données excédentaires sont perdues, et retourne de Recevoir une valeur de SOCKET_ERROR avec un code d'erreur défini à WSAEMSGSIZE. Si aucune donnée entrante n'est disponible au socket, une valeur de SOCKET_ERROR est retournée avec un code d'erreur défini à WSAEWOULDBLOCK. La fonction de rappel d' OnReceive peut être utilisée pour déterminer si plus de données arrivent.

Si le socket est de type SOCK_STREAM et la partie distant a arrêté la connexion correctement, Recevoir se terminera immédiatement les octets 0 acceptés. Si la connexion a été réinitialisation, Recevoir échoue avec une erreur WSAECONNRESET.

Recevoir doit être appelé qu'une seule fois pour chaque fois que CAsyncSocket::OnReceive est appelé.

Exemple

Consultez l'exemple pour CAsyncSocket::OnReceive.

Configuration requise

Header: afxsock.h

Voir aussi

Référence

CAsyncSocket, classe

Graphique de la hiérarchie

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send