Udostępnij za pośrednictwem


CAsyncSocket::ReceiveFrom

Wywołać funkcję Członkowskie otrzymują datagram i przechowywać adres źródłowy w SOCKADDR struktury lub w rSocketAddress.

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  
);

Parametry

  • lpBuf
    Bufor danych przychodzących.

  • nBufLen
    Długość lpBuf w bajtach.

  • rSocketAddress
    Odniesienie do CString obiekt, który odbiera kropkowane numerem adresu IP.

  • rSocketPort
    Odniesienie do UINT przechowujący portu.

  • lpSockAddr
    Wskaźnik do SOCKADDR strukturę, która przechowuje adres źródłowy po powrocie.

  • lpSockAddrLen
    Wskaźnik do długości adres źródłowy w lpSockAddr w bajtach.

  • nFlags
    Określa sposób wywołania.Semantyka tej funkcji są określane przez opcje gniazda i nFlags parametru.Ten ostatni jest skonstruowany przez następujące wartości z C++ OR operatora:

    • MSG_PEEK wglądu przychodzących danych.Dane jest kopiowany do buforu, ale nie są usuwane z kolejki wejściowej.

    • MSG_OOB przetwarzania danych-band.

Wartość zwracana

Jeśli błąd nie wystąpi, ReceiveFrom zwraca liczbę bajtów odebranych.Połączenie zostało zamknięte, zwraca wartość 0.W przeciwnym razie wartość SOCKET_ERROR jest zwracana i kod błędu mogą być pobierane przez wywołanie GetLastError.Do tej funkcji Członkowskich stosuje się następujące błędy:

  • WSANOTINITIALISED pomyślnie AfxSocketInit musi wystąpić przed użyciem tego interfejsu API.

  • WSAENETDOWN implementacja Windows Sockets wykrył, że podsystem sieci nie powiodło się.

  • WSAEFAULTlpSockAddrLen nieprawidłowy argument: lpSockAddr bufor jest zbyt mały, aby pomieścić adres elementu równorzędnego.

  • WSAEINPROGRESS jest wykonywana operacja blokująca Windows Sockets.

  • WSAEINVAL z nie powiązano gniazdo powiązania.

  • WSAENOTCONN gniazdo nie jest połączony (SOCK_STREAM tylko).

  • WSAENOTSOCK deskryptora nie jest gniazdem.

  • WSAEOPNOTSUPP   MSG_OOB została określona, ale gniazdo nie jest typu SOCK_STREAM.

  • WSAESHUTDOWN został zamknięty gniazdo; nie jest możliwe wywołanie ReceiveFrom na gnieździe po ShutDown została przywołana z nHow ustawiona na 0 lub 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczony jako nieblokujących i ReceiveFrom Operacja spowodowałaby zablokowanie.

  • WSAEMSGSIZE datagram jest zbyt duży do buforu i został obcięty.

  • WSAECONNABORTED obwód wirtualny została przerwana z powodu limitu czasu lub innych awarii.

  • WSAECONNRESET obwód wirtualny został zresetowany przez strony zdalnej.

Uwagi

Ta funkcja służy do odczytywania danych przychodzących na gnieździe (ewentualnie połączono) i przechwycić adres, z którego dane zostały wysłane.

Aby obsługiwać adresy IPv6, należy użyć CAsyncSocket::ReceiveFromEx.

Dla gniazd typu SOCK_STREAM, jak wiele informacji jest obecnie dostępnych rozmiarów bufor jest zwracany.Jeśli gniazdo skonfigurowano w linii odbioru danych-band (socket opcja SO_OOBINLINE) i danych-band nieprzeczytane, zostaną zwrócone dane tylko out-of-band.Aplikacja może używać IOCtlSIOCATMARK opcji lub OnOutOfBandData do określenia, czy wszystkie dane bardziej z pozapasmowego pozostaje odczytywane.lpSockAddr i lpSockAddrLen parametry są ignorowane dla SOCK_STREAM gniazd.

Dla gniazd datagram danych jest wyodrębniana z pierwszej datagram został umieszczony w kolejce, do rozmiaru bufor.Jeśli datagram jest większe niż bufor, bufor jest wypełniona w pierwszej części wiadomości, nadmiar dane zostaną utracone, a ReceiveFrom zwraca wartość SOCKET_ERROR z kodem błędu ustaw WSAEMSGSIZE.

Jeśli lpSockAddr jest różna od zera, a typem jest gniazdo SOCK_DGRAM, adres sieciowy gniazda, w którym przesyłane dane są kopiowane do odpowiednich SOCKADDR struktury.Wartość wskazywana przez lpSockAddrLen jest inicjowany rozmiar tej struktury i jest modyfikowany na powrót do rzeczywistego rozmiaru adres tam przechowywane.Jeśli przychodzące dane są niedostępne w gnieździe, ReceiveFrom wywołanie oczekuje na dane dotrzeć, chyba że to gniazdo jest nieblokujących.W tym przypadku wartość SOCKET_ERROR zwracany jest kod błędu ustaw WSAEWOULDBLOCK.OnReceive Wywołania zwrotnego może służyć do określenia, kiedy nadejdzie więcej danych.

Jeśli typem jest gniazdo SOCK_STREAM i strona zdalna jest zamknięcie połączenia, ReceiveFrom natychmiast zakończy się 0 bajtów odebranych.

Wymagania

Nagłówek: afxsock.h

Zobacz też

Informacje

Klasa CAsyncSocket

Diagram hierarchii

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send