CAsyncSocket::ReceiveFrom

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

Index