CAsyncSocket::ReceiveFrom

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

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

Valore restituito

Se si verifica alcun errore, ReceiveFrom restituisce il numero di byte ricevuti. Se la connessione è stata chiusa, restituisce 0. In caso contrario, viene restituito un valore di SOCKET_ERROR , e un codice di errore specifico può essere recuperato chiamando GetLastError. I seguenti errori si applicano a questa funzione membro:

Parametri

lpBuf

Un buffer per i dati in arrivo.

nBufLen

La lunghezza di lpBuf in byte.

rSocketAddress

Riferimento a un oggetto CString che riceve un indirizzo IP di numero punteggiato.

rSocketPort

Riferimento a un UINT che memorizza una porta.

lpSockAddr

Un puntatore a una struttura SOCKADDR che contiene l'indirizzo di origine al ritorno.

lpSockAddrLen

Un puntatore alla lunghezza dell'indirizzo sorgente in lpSockAddr in byte.

nFlags

Specifica il modo in cui viene effettuata la chiamata. La semantica di questa funzione è determinata dalle opzioni del socket e il parametro nFlags . Quest'ultimo viene creato combinando uno qualsiasi dei seguenti valori con l'operatore C++ o:

Osservazioni

Chiamare questa funzione membro per ricevere un datagramma e memorizzare l'indirizzo di origine nella struttura SOCKADDR o in rSocketAddress. Questa funzione viene utilizzata per leggere i dati in arrivo su un socket (possibilmente collegato) e catturare l'indirizzo da cui è stati inviati i dati.

Per i socket di tipo SOCK_STREAM, tante informazioni come è attualmente disponibile fino alla dimensione del buffer fornito viene restituite. Se il socket è stato configurato per la ricezione in linea di dati fuori banda (opzione socket SO_OOBINLINE) e out-of-band dati non letti, verranno restituiti solo i dati di out-of-band. L'applicazione può utilizzare l'opzioneSIOCATMARK IOCtlo OnOutOfBandData per determinare se i dati più out-of-band rimangono da leggere. Per i socket SOCK_STREAM vengono ignorati i parametri lpSockAddr e lpSockAddrLen .

Per i socket di datagramma, i dati vengono estratti dal primo datagramma accodato, fino alla dimensione del buffer fornito. Se il datagramma è più il buffer fornito, il buffer viene riempito con la prima parte del messaggio, eccesso vengono persi e ReceiveFrom restituisce un valore di SOCKET_ERROR con il codice di errore impostato su WSAEMSGSIZE.

Se lpSockAddr è diverso da zero, e la presa di corrente è di tipo SOCK_DGRAM, l'indirizzo di rete del socket che ha inviato i dati viene copiata la struttura SOCKADDR corrispondente. Il valore indicato dal lpSockAddrLen viene inizializzato per la dimensione di questa struttura e viene modificato al ritorno per indicare le dimensioni effettive dell'indirizzo memorizzato. Se nessun dato in ingresso è disponibile presso la presa di corrente, la chiamata ReceiveFrom attende dati ad arrivare a meno che il socket è non bloccante. In questo caso, un valore di SOCKET_ERROR viene restituito con il codice di errore impostato su WSAEWOULDBLOCK. Il callback OnReceive può essere utilizzato per determinare quando arrivano più dati.

Se il socket è di tipo SOCK_STREAM e il lato remoto ha chiuso la connessione con garbo, un ReceiveFrom completerà immediatamente con 0 byte ricevuti.

CAsyncSocket panoramica |nbsp; Membri della classe | Gerarchia Chart

Vedere a&nchenbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::Send

Index