Condividi tramite


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

Vedere anche

Riferimenti

Classe CAsyncSocket

Grafico delle gerarchie

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send