Sdílet prostřednictvím


CAsyncSocket::Receive

Volání funkce tohoto člena přijímat data z soket.

virtual int Receive( 
   void* lpBuf, 
   int nBufLen, 
   int nFlags = 0  
);

Parametry

  • lpBuf
    Vyrovnávací paměť pro příchozí data.

  • nBufLen
    Délka lpBuf v bajtech.

  • 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ě, příjem 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.

  • WSAENOTCONN soket není připojen.

  • WSAEINPROGRESS právě probíhá blokující operace rozhraní Windows Sockets.

  • 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 příjem na soketu po ShutDown vyvolal s nHow nastaveno na 0 nebo 2.

  • WSAEWOULDBLOCK soketu je označen jako neblokový a příjem operace by blokování.

  • WSAEMSGSIZE datagram byl příliš dlouhý a nevejde se do zadané vyrovnávací paměti a byla zkrácena.

  • WSAEINVAL soketu není vázán s Bind.

  • 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 se používá pro připojení datového proudu nebo datagram sockets a slouží ke čtení příchozí data.

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í.

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 datagram, nadbytečná data ztracena, a příjem vrátí hodnotu SOCKET_ERROR nastavena s kódem chyby WSAEMSGSIZE.Pokud žádné příchozí data je k dispozici v soketu, hodnota SOCKET_ERROR je vrácen kód chyby nastaven na WSAEWOULDBLOCK.OnReceive funkci 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í, příjem bude okamžitě s přijato 0 bajtů.Pokud připojení bylo resetováno, příjem se nezdaří s chybou WSAECONNRESET.

Zobrazí by měla být volána pouze jednou pro každý čas CAsyncSocket::OnReceive se nazývá.

Příklad

Příklad pro CAsyncSocket::OnReceive.

Požadavky

Záhlaví: afxsock.h

Viz také

Referenční dokumentace

Třída CAsyncSocket

Graf hierarchie

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send