CAsyncSocket::ReceiveFrom

int ReceiveFrom ( void * lpBuf, int nBufLen, CStringamp ; rSocketAddress, UINT & rSocketPort, int nFlags = 0 );

int ReceiveFrom ( void * lpBuf, int nBufLen, SOCKADDR * lpSockAddr, int * lpSockAddrLen, int nFlags = 0 );

Valeur de retour

Si aucune erreur ne survient, ReceiveFrom renvoie le nombre d'octets reçus. Si la connexion a été fermée, elle renvoie 0. Sinon, la valeur SOCKET_ERROR est retournée, et un code d'erreur spécifique peut être récupéré par appeler GetLastError. Les erreurs suivantes s'appliquent à cette fonction membre:

Paramètres

lpBuf

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

nBufLen

La longueur du lpBuf en octets.

rSocketAddress

Référence à un objet CString qui reçoit une pointillé Adresse Numéro de IP.

rSocketPort

Référence à un UINT qui stocke un port.

lpSockAddr

Un pointeur vers une structure SOCKADDR qui contient l'adresse source à retour.

lpSockAddrLen

Un pointeur vers la longueur de l'adresse source dans lpSockAddr en octets.

nFlags

Spécifie la manière dont l'appel est effectué. La sémantique de cette fonction est déterminée par les options de socket et le paramètre nIndicateurs . Ce dernier est construit en combinant l'une des valeurs suivantes à l'opérateur C++ ou:

Remarques

Appelez cette fonction membre pour recevoir un datagramme et de stocker l'adresse source dans la structure SOCKADDR ou rSocketAddress. Cette fonction est utilisée pour lire les données entrantes sur un socket (éventuellement connecté) et saisir l'adresse d'où ont été envoyées les données.

Pour les sockets de type SOCK_STREAM, autant d'informations est disponible jusqu'à la taille de la mémoire tampon est retourné. Si la socket a été configuré pour la réception en ligne des données hors-bande (option de socket SO_OOBINLINE) et out-of-band données non lus, n'out-of-band données seront retournées. L'application peut utiliser l'option de contrôle IOCtlSIOCATMARK ou OnOutOfBandData afin de déterminer si des données plus out-of-band restent à lire. Les paramètres lpSockAddr et lpSockAddrLen sont ignorés pour les sockets SOCK_STREAM .

Pour les sockets datagramme, données on extrait le premier datagramme en attente, jusqu'à la taille de la mémoire tampon fournie. Si le datagramme est plus grand que le tampon, le tampon est rempli avec la première partie du message, les données excédentaires sont perdues et ReceiveFrom renvoie la valeur SOCKET_ERROR avec le code d'erreur défini sur WSAEMSGSIZE.

Si lpSockAddr est différente de zéro, et le socket est de type SOCK_DGRAM, l'adresse réseau de l'attache qui envoie les données est copié dans la structure SOCKADDR correspondante. La valeur pointée par lpSockAddrLen est initialisée à la taille de cette structure et est modifiée le retour pour indiquer la taille réelle de l'adresse stockée il. Si aucune donnée n'entrante est disponible à l'attache, l'appel ReceiveFrom attend données arriver à moins que le socket non bloquant. Dans ce cas, la valeur SOCKET_ERROR est retournée avec le code d'erreur WSAEWOULDBLOCKla valeur. Le rappel de OnReceive peut être utilisé pour déterminer quand plus de données arrive.

Si la socket est de type SOCK_STREAM et le côté distant a fermé la connexion avec élégance, un ReceiveFrom se terminera immédiatement avec 0 octets reçus.

Aperçu de CAsyncSocket |nbsp ; Membres de la classe | Graphique de la hiérarchie

Voir aussi  ;CAsyncSocket::AsyncSelect, CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::Send

Index