int ReceiveFrom ( void * lpBuf, int nBufLen, CStringamp; rSocketAddress, UINT & rSocketPort, int nFlags = 0 );
int ReceiveFrom ( void * lpBuf, int nBufLen, SOCKADDR * lpSockAddr, int * lpSockAddrLen, int nFlags = 0 );
Wartość zwracany
Jeśli błąd nie wystąpi, ReceiveFrom zwraca liczbę bajtów odebranych. Jeśli połączenie zostało zamknięte, zwraca 0. W przeciwnym wypadku zwracana jest wartość SOCKET_ERROR , a kod błędu mogą być pobierane przez wywołanie GetLastError. Następujące błędy stosuje się do tej funkcji członek:
Parametry
lpBuf
Bufor danych przychodzących.
nBufLen
Długość lpBuf w bajtach.
rSocketAddress
Odwołanie do obiektu CString , odbierająca kropkowane numerem adresu IP.
rSocketPort
Odniesienie do UINT , który przechowuje portu.
lpSockAddr
Wskaźnik do struktury SOCKADDR , który przechowuje adres źródłowy po powrocie.
lpSockAddrLen
Wskaźnik długość adresu źródłowego w lpSockAddr w bajtach.
nFlags
Określa sposób, w której połączenie jest nawiązywane. Semantyka tej funkcji są określane przez opcje gniazda i parametr nFlags . Ten ostatni jest wykonane przez łączenie dowolnego z następujących wartości z operatorem C++ lub:
Uwagi
Wywołanie tej funkcji Państwa do odbierania datagramów i przechowywać adres źródłowy w strukturze SOCKADDR lub rSocketAddress. Funkcja ta jest używana do czytania przychodzących danych na gnieździe (ewentualnie połączonych) i przechwycić adres, z którego wysłano danych.
Dla gniazd typu SOCK_STREAMjak najwięcej informacji jest obecnie dostępny do rozmiaru bufor jest zwracany. Jeśli gniazdo skonfigurowano do odbioru śródwierszowej poza pasmem danych (opcja gniazdo SO_OOBINLINE) i poza pasmem danych jest nieprzeczytane, tylko poza pasmem dane będą zwracane. Aplikacji można użyć IOCtlSIOCATMARK opcji lub OnOutOfBandData , aby ustalić, czy wszystkie dane więcej poza pasmem pozostaje do odczytu. Parametry lpSockAddr i lpSockAddrLen są ignorowane dla gniazd SOCK_STREAM .
Dla datagramu gniazd dane ekstrahuje się z pierwszym 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, ustawiony na WSAEMSGSIZE.
Jeśli lpSockAddr jest różna od zera, a gniazdo typu SOCK_DGRAM, adres sieciowy gniazda, które wysyłane dane jest kopiowany do odpowiedniej struktury SOCKADDR . Wartość wskazywanego przez lpSockAddrLen jest inicjowany do rozmiaru tej struktury i jest modyfikowany na powrót do wskazać rozmiar rzeczywisty adres przechowywane. Jeśli nie dane przychodzące jest dostępna w gniazda, wywołanie ReceiveFrom czeka na danych dotrzeć, chyba że gniazdo nieblokujących. W tym przypadku zwracana jest wartość o SOCKET_ERROR z kodem błędu, ustawiony na WSAEWOULDBLOCK. Wywołania zwrotnego OnReceive można określić, kiedy nadejdzie więcej danych.
Gniazdo jest typu SOCK_STREAM i strona zdalna została łagodnego zamknięcia połączenia, ReceiveFrom natychmiast zakończy się z 0 bajtów odebranych.
Omówienie CAsyncSocket |nbsp; Klasa członków | Wykres hierarchii
Zobacz też CAsyncSocket::AsyncSelect, CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::Send