CAsyncSocket::Receive

Rufen Sie die Memberfunktion auf, um Daten von einem Socket zu empfangen.

virtual int Receive(
   void* lpBuf,
   int nBufLen,
   int nFlags = 0 
);

Parameter

  • lpBuf
    Ein Puffer für die eingehenden Daten.

  • nBufLen
    Die Länge von lpBuf in Bytes.

  • nFlags
    Gibt die Methode an, in der der Aufruf ausgeführt wird.Die Semantik dieser Funktion wird mit der Socketoptionen und den nFlags-Parameter bestimmt.Der zweite Vorgang wird erstellt, indem Sie eine der folgenden Werte mit dem Operator C++ OR kombiniert:

    • MSG_PEEK flüchtiger Blicker flüchtiger Blick auf den eingehenden Daten.Die Daten werden in den Puffer kopiert, aber nicht von der Eingabewarteschlange entfernt.

    • MSG_OOB Prozessout-of-band-daten.

Rückgabewert

Wenn kein Fehler auftritt, gibt Receive die Anzahl von Bytes empfangen zurück.Wenn die Verbindung geschlossen wurde, wird der Wert 0 zurückgegeben.Andernfalls wird ein Wert von SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode kann abgerufen werden, indem Sie GetLastError aufruft.Die folgenden Fehler gelten für diese Memberfunktion zu:

  • Vor der Verwendung dieser APIs WSANOTINITIALISED einem erfolgreichen AfxSocketInit muss auftreten.

  • WSAENETDOWN, das die Windows Socket-Implementierung hat, dass das Netzwerksubsystem fehlgeschlagen ist.

  • WSAENOTCONN der Socket wird nicht verbunden.

  • Ist blockierenden Windows Socket-Vorgang WSAEINPROGRESS A ausgeführt.

  • WSAENOTSOCK der Deskriptor ist kein Socket.

  • WSAEOPNOTSUPP   MSG_OOB wurde angegeben, aber der Socket ist nicht vom Typ SOCK_STREAM.

  • WSAESHUTDOWN der Socket heruntergefahren wurde; Es ist nicht möglich, Receive auf einem Socket aufzurufen, nachdem ShutDown mit nHow aufgerufen wurde, das auf 0 oder 2 gesetzt ist.

  • WSAEWOULDBLOCK der Socket wird nicht als blockiert markiert und der Receive Vorgang würde blockieren.

  • WSAEMSGSIZE das Datagramm war zu groß, in den angegebenen Puffer angepasst und wurde abgeschnitten.

  • WSAEINVAL der Socket ist nicht mit Bind gebunden.

  • WSAECONNABORTED die virtuelle Verbindung wurde aufgrund des Timeouts oder anderen Fehlers abgebrochen.

  • WSAECONNRESET die virtuelle Verbindung wurde durch den Seite zurückgesetzt.

Hinweise

Diese Funktion wird für verbundenen Stream oder Datagrammsockets verwendet und wird verwendet, um eingehende Daten zu lesen.

Für Sockets des Typs SOCK_STREAM, werden so viele Informationen wie bis zur Größe des angegebenen Puffers verfügbar ist, zurückgegeben.Wenn der Socket für inline Aufnahme von Out-of-Band-Daten (Socketoption SO_OOBINLINE) konfiguriert wurde und Out-of-Band-Daten sind ungelesen, nur Out-of-Band-Daten zurückgegeben werden.Die Anwendung kann die IOCtlSIOCATMARK Option oder OnOutOfBandData verwenden, um zu bestimmen, ob mehr Out-of-Band-Daten gelesen werden bleiben.

Für Datagrammsockets werden Daten aus dem ersten in die Warteschlange gereihten Datagramm extrahiert, bis der Größe des angegebenen Puffers.Wenn das Datagramm größer als der angegebene Puffer ist, wird der Puffer mit dem ersten Teil des Datagramms gefüllt, werden die überzähligen Daten und Receive gibt einen Wert von SOCKET_ERROR mit dem Fehlercode verloren, der zu WSAEMSGSIZE den wird.Wenn keine eingehenden Daten am Socket verfügbar sind, wird ein Wert von SOCKET_ERROR mit dem Fehlercode zurückgegeben, der den zu WSAEWOULDBLOCK wird.Die OnReceive Rückruffunktion kann verwendet werden, um zu bestimmen, wenn mehr Daten erhält.

Wenn der Socket vom Typ SOCK_STREAM ist und den Seite die Verbindung ordnungsgemäß beendet hat, schließt Receive sofort mit 0 Bytes empfangen ab.Wenn die Verbindung zurückgesetzt wurde, schlägt Receive mit dem Fehler WSAECONNRESET aus.

Receive sollte für nur einmal aufgerufen werden, wenn CAsyncSocket::OnReceive aufgerufen wird.

Beispiel

Im Beispiel für CAsyncSocket::OnReceive.

Anforderungen

Header: afxsock.h

Siehe auch

Referenz

CAsyncSocket-Klasse

Hierarchien-Diagramm

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send