CAsyncSocket::ReceiveFromEx
Wywołać funkcję Członkowskie otrzymują datagram i przechowywać adres źródłowy w SOCKADDR struktury lub w rSocketAddress (obsługuje adresy IPv6).
int ReceiveFromEx(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
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.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, ReceiveFromEx 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 ReceiveFromEx na gnieździe po ShutDown została przywołana z nHow ustawiona na 0 lub 2.
WSAEWOULDBLOCK gniazdo jest oznaczony jako nieblokujących i ReceiveFromEx 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.
Ta funkcja jest taki sam, jak CAsyncSocket::ReceiveFrom , chyba że obsługuje on IPv6 adresy jak również jako starsze protokoły.
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 ReceiveFromEx 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, ReceiveFromEx 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, ReceiveFromEx natychmiast zakończy się 0 bajtów odebranych.
Wymagania
Nagłówek: afxsock.h