CAsyncSocket::ReceiveFromEx
Chiamare la funzione membro per ricevere un datagram e archiviare l'indirizzo di destinazione nella struttura SOCKADDR o in rSocketAddress (indirizzi IPv6 di handle).
int ReceiveFromEx(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
int nFlags = 0
);
Parametri
lpBuf
Un buffer dei dati in ingresso.nBufLen
La lunghezza lpBuf in byte.rSocketAddress
Riferimento a un oggetto CString che riceve un indirizzo IP tratteggiato del numero.rSocketPort
Riferimento a uint che archivia una porta.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, ReceiveFromEx 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.
WSAEFAULT l'argomento lpSockAddrLen non è valido: il buffer lpSockAddr è troppo piccolo per includere l'indirizzo peer.
WSAEINPROGRESS che blocca l'operazione di Windows Sockets è in corso.
IlWSAEINVAL socket non è stato associato a Associa.
IlWSAENOTCONN socket non è connessoSOCK_STREAM (solo).
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 ReceiveFromEx su un socket dopo ShutDown è stato richiamato con nHow impostato su 0 o 2.
IlWSAEWOULDBLOCK socket è contrassegnato come non bloccante e l'operazione ReceiveFromEx blocca.
IlWSAEMSGSIZE datagram è troppo grande per inserire nel buffer specificato ed è stato troncato.
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 leggere i dati in ingresso su socket (eventualmente connessa) e per acquisire l'indirizzo che i dati inviati.
Questa funzione è la stessa CAsyncSocket::ReceiveFrom con la differenza che gestisce gli indirizzi IPv6 e protocolli più recenti.
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.I parametri lpSockAddrLen e lpSockAddr vengono ignorati per i socket SOCK_STREAM.
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 del messaggio, i dati in eccesso vengono persi e ritorno ReceiveFromEx un valore SOCKET_ERROR con il codice di errore impostato su WSAEMSGSIZE.
Se lpSockAddr è diverso da zero e il socket è di tipo SOCK_DGRAM, l'indirizzo di rete di socket che ha inviato i dati viene copiato nella struttura corrispondente SOCKADDR.Il valore puntato da lpSockAddrLen viene inizializzato alla dimensione della struttura e viene modificato da restituire per indicare la dimensione effettiva dell'indirizzo archiviato in.Se non sono disponibili dati in ingresso disponibili a socket, attende di chiamata ReceiveFromEx i dati da arrivare a meno che il sia socket non bloccante.In questo caso, un valore SOCKET_ERROR viene restituito dal codice di errore impostato su WSAEWOULDBLOCK.Il callback OnReceive può essere utilizzato per determinare quando più dati arrivano.
Se il socket è di tipo SOCK_STREAM e il lato remoto chiude la connessione correttamente, ReceiveFromEx completata immediatamente ai 0 byte ricevuti.
Requisiti
Header: afxsock.h