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