CAsyncSocket::ReceiveFrom

Rufen Sie die Memberfunktion auf, um ein Datagramm zu empfangen und die Quelladresse in der SOCKADDR-Struktur oder in rSocketAddress zu speichern.

int ReceiveFrom(
   void* lpBuf,
   int nBufLen,
   CString& rSocketAddress,
   UINT& rSocketPort,
   int nFlags = 0 
);
int ReceiveFrom(
   void* lpBuf,
   int nBufLen,
   SOCKADDR* lpSockAddr,
   int* lpSockAddrLen,
   int nFlags = 0 
);

Parameter

  • lpBuf
    Ein Puffer für die eingehenden Daten.

  • nBufLen
    Die Länge von lpBuf in Bytes.

  • rSocketAddress
    Verweis auf ein CString-Objekt, das eine durch Punkte getrennte Zahl IP-Adresse empfängt.

  • rSocketPort
    Verweis auf UINT, der einen Port speichert.

  • lpSockAddr
    Ein Zeiger auf eine SOCKADDR-Struktur, die die Quelladresse nach Rückgabe enthält.

  • lpSockAddrLen
    Ein Zeiger auf die Länge der Quelladresse in lpSockAddr 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 ReceiveFrom 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.

  • WSAEFAULT das lpSockAddrLen-Argument war ungültig: der lpSockAddr Puffer war zu klein, die Peeradresse angepasst.

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

  • WSAEINVAL der Socket ist nicht mit Bind gebunden.

  • WSAENOTCONN der Socket wird nicht verbunden (nur SOCK_STREAM ).

  • 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, ReceiveFrom 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 ReceiveFrom Vorgang würde blockieren.

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

  • 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 verwendet, um eingehende Daten auf einem Socket zu lesen (möglicherweise verbunden) und die Adresse aufzuzeichnen, aus der die Daten gesendet wurden.

Um Adressen IPv6 zu behandeln, verwenden Sie CAsyncSocket::ReceiveFromEx.

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 Option oder OnOutOfBandDataIOCtlSIOCATMARK verwenden, um zu bestimmen, ob mehr Out-of-Band-Daten gelesen werden bleiben.Die lpSockAddr und lpSockAddrLen-Parameter werden für SOCK_STREAM Sockets ignoriert.

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 der Meldung gefüllt, werden die überzähligen Daten und ReceiveFrom gibt einen Wert von SOCKET_ERROR mit dem Fehlercode verloren, der zu WSAEMSGSIZE den wird.

Wenn lpSockAddr ungleich 0 ist und der Socket vom Typ SOCK_DGRAM ist, wird die Netzwerkadresse des Sockets, der die Daten gesendet hat, der entsprechenden SOCKADDR-Struktur kopiert.Der Wert, der auf durch lpSockAddrLen gezeigt wird, wird der Größe dieser Struktur initialisiert und wird bei Rückgabe geändert, um das der tatsächlichen Größe der Adresse anzugeben, die dort gespeichert wird.Wenn keine eingehenden Daten am Socket verfügbar sind, wartet der ReceiveFrom Aufruf auf Daten, um anzukommen, es sei denn, der Socket nicht blockiert wird.In diesem Fall wird ein Wert von SOCKET_ERROR mit dem Fehlercode zurückgegeben, der den zu WSAEWOULDBLOCK wird.Der OnReceive Rückruf 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 ReceiveFrom sofort mit 0 Bytes empfangen ab.

Anforderungen

Header: afxsock.h

Siehe auch

Referenz

CAsyncSocket-Klasse

Hierarchien-Diagramm

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send