Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Třída CAsyncSocket

Diagram hierarchie

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send