CAsyncSocket::Receive
Chiamare la funzione membro per ricevere i dati da un socket.
virtual int Receive(
void* lpBuf,
int nBufLen,
int nFlags = 0
);
Parametri
lpBuf
Un buffer dei dati in ingresso.nBufLen
La lunghezza lpBuf in byte.nFlags
Specifica la modalità in cui la chiamata viene eseguita.La semantica di questa funzione viene determinata dalle opzioni di socket e dal parametro nFlags.L'ultimo viene costruito combinando uno dei seguenti valori con l'operatore C++ OR :Sbirciata diMSG_PEEK ai dati in ingresso.I dati vengono copiati nel buffer ma non vengono rimossi dalla coda di input.
Dati fuori banda di processo diMSG_OOB.
Valore restituito
Se non si verificano errori, Ricezione restituisce il numero di byte ricevuti.Se la connessione è stata chiusa, restituisce 0.In caso contrario, un valore SOCKET_ERROR viene restituito e un codice di errore specifico può essere recuperato chiamando GetLastError.Gli errori seguenti si applicano a questa funzione membro:
WSANOTINITIALISED Al AfxSocketInit deve verificarsi prima di utilizzare questa API.
WSAENETDOWN che l'implementazione di Windows Sockets ha rilevato che il sottosistema di rete non è riuscita.
IlWSAENOTCONN socket non è connesso.
WSAEINPROGRESS che blocca l'operazione di Windows Sockets è in corso.
WSAENOTSOCK il descrittore non è un socket.
WSAEOPNOTSUPP MSG_OOB è stato specificato, ma il socket non è di tipo SOCK_STREAM.
IlWSAESHUTDOWN socket è stato interrotto; non è possibile chiamare Ricezione su un socket dopo ShutDown è stato richiamato con nHow impostato su 0 o 2.
IlWSAEWOULDBLOCK socket è contrassegnato come non bloccante e l'operazione Ricezione blocca.
IlWSAEMSGSIZE datagram è troppo grande per inserire nel buffer specificato ed è stato troncato.
IlWSAEINVAL socket non è stato associato a Associa.
IlWSAECONNABORTED circuito virtuale è stato interrotto a causa dell'intervallo o di altro tipo.
IlWSAECONNRESET circuito virtuale è stato reimpostato sul lato remoto.
Note
Questa funzione viene utilizzata per il flusso connesso o sockets di datagramma viene utilizzata per leggere i dati in ingresso.
Per i socket di tipo SOCK_STREAM, tutte le informazioni che sono attualmente disponibili finché la dimensione del buffer fornito vengono restituite.Se il socket è stato configurato per ricevere inline di dati fuori banda (opzione di socket SO_OOBINLINE) e i dati fuori banda non vengono letti, solo i dati fuori banda verranno restituiti.L'applicazione può utilizzare l'opzione o OnOutOfBandDataIOCtlSIOCATMARK determinare se altri dati fuori banda da leggere.
Per i socket di datagramma, i dati vengono estratti dal primo datagram enqueued, fino alla dimensione del buffer specificato.Se il datagram è più grande del buffer fornito, il buffer viene inserito prima parte di datagram, i dati in eccesso vengono persi e ritorno Ricezione un valore SOCKET_ERROR con il codice di errore impostato su WSAEMSGSIZE.Se non sono disponibili dati in ingresso disponibili a socket, un valore SOCKET_ERROR viene restituito dal codice di errore impostato su WSAEWOULDBLOCK.La funzione di callback OnReceive può essere utilizzata per determinare quando più dati arrivano.
Se il socket è di tipo SOCK_STREAM e il lato remoto chiude la connessione correttamente, Ricezione completata immediatamente ai 0 byte ricevuti.Se la connessione è stata reimpostata, Ricezione non riuscirà all'errore WSAECONNRESET.
Ricezione deve essere chiamato solo una volta per ogni volta CAsyncSocket::OnReceive viene chiamato.
Esempio
Vedere l'esempio relativo CAsyncSocket::OnReceive.
Requisiti
Header: afxsock.h