CAsyncSocket::ReceiveFromEx
Volání funkce tohoto člena přijímat datagram a ukládat zdrojová adresa v SOCKADDR struktury nebo v rSocketAddress (zpracovává adresy IPv6).
int ReceiveFromEx(
void* lpBuf,
int nBufLen,
CString& rSocketAddress,
UINT& rSocketPort,
int nFlags = 0
);
Parametry
lpBuf
Vyrovnávací paměť pro příchozí data.nBufLen
Délka lpBuf v bajtech.rSocketAddress
Odkaz CString objekt, který obdrží tečkované číselnou adresu IP.rSocketPort
Odkaz UINT , ukládá portu.nFlags
Určuje způsob při volání.Sémantika této funkce, které jsou určeny možnosti soketu a nFlags parametr.Vyrobeno kombinací následujících hodnot s C++ OR operátor:MSG_PEEK prohlížet příchozí data.Data zkopírována do vyrovnávací paměti, ale není odebrán ze vstupní fronty.
MSG_OOB out-of-band data zpracovat.
Vrácená hodnota
Pokud nedojde k žádné chybě, ReceiveFromEx vrací počet přijatých bajtů.Připojení bylo ukončeno, vrátí hodnotu 0.Jinak hodnota SOCKET_ERROR je vrácena a chybový kód získat voláním GetLastError .Tato funkce člena vztahuje následující chyby:
WSANOTINITIALISED úspěšné AfxSocketInit musí dojít před použitím tohoto rozhraní API.
WSAENETDOWN implementace rozhraní Windows Sockets zjistil, že selhání síťového podsystému.
WSAEFAULT lpSockAddrLen je neplatný argument: lpSockAddr vyrovnávací paměť byla příliš malá, aby adresa druhé strany.
WSAEINPROGRESS právě probíhá blokující operace rozhraní Windows Sockets.
WSAEINVAL soketu není vázán s Bind.
WSAENOTCONN soket není připojen (SOCK_STREAM pouze).
WSAENOTSOCK popisovač není soket.
WSAEOPNOTSUPP MSG_OOB byla zadána, ale soketu není typu SOCK_STREAM.
WSAESHUTDOWN soketu byl ukončen; není možné volat ReceiveFromEx na soketu po ShutDown vyvolal s nHow nastaveno na 0 nebo 2.
WSAEWOULDBLOCK soketu je označen jako neblokový a ReceiveFromEx operace by blokování.
WSAEMSGSIZE datagram byl příliš dlouhý a nevejde se do zadané vyrovnávací paměti a byla zkrácena.
WSAECONNABORTED virtuální okruh byl přerušen z důvodu vypršení časového limitu nebo jiného selhání.
WSAECONNRESET virtuální okruh byla obnovena vzdálenou stranou.
Poznámky
Tato funkce slouží k čtení příchozí data (případně připojeným) soketem a zachytit adresu, ze kterého byla odeslána data.
Tato funkce je stejná jako CAsyncSocket::ReceiveFrom , zpracovává IPv6 adresy i starší protokoly.
Pro sokety typu SOCK_STREAM, jako je vrácené množství informací, jako je nyní k dispozici až do velikosti vyrovnávací paměť dodaná.Pokud byl nakonfigurován pro příjem řádek band data soketu (možnost soketu SO_OOBINLINE) a -band data nepřečtené, bude vrácena pouze out-of-band data.Můžete použít aplikaci IOCtlSIOCATMARK možnost nebo OnOutOfBandData zjistit, zda zůstane více out-of-band data ke čtení. lpSockAddr a lpSockAddrLen pro jsou ignorovány parametry SOCK_STREAM soketů.
Pro datagram sockets dat je extrahován z první byla zařazena do fronty datagram, velikost vyrovnávací paměti dodány.Pokud je větší než vyrovnávací paměť předaná datagram, vyrovnávací paměť je vyplněna první část zprávy, nadbytečná data ztracena, a ReceiveFromEx vrátí hodnotu SOCKET_ERROR nastavte s kódem chyby WSAEMSGSIZE.
Pokud lpSockAddr je nenulová, a typ soketu je SOCK_DGRAM, síťová adresa soketu, který odešle data zkopírována do odpovídajícího SOCKADDR struktury.Hodnota odkazuje lpSockAddrLen na velikost této struktury je inicializována a je změněn na návrat k označení skutečná velikost adresy uloženy.Pokud je k dispozici žádné příchozí data na soketu, ReceiveFromEx volání čeká data doručení není soket neblokový.V tomto případě hodnotu SOCKET_ERROR je vrácen kód chyby nastaven na WSAEWOULDBLOCK. OnReceive Zpětného volání lze použít k určení, kdy dorazí další data.
Pokud je typ soketu SOCK_STREAM a Vzdálená strana má připojení řádné ukončení, ReceiveFromEx bude okamžitě s přijato 0 bajtů.
Požadavky
Záhlaví: afxsock.h