Udostępnij za pośrednictwem


CAsyncSocket::Receive

Wywołanie tej funkcji Członkowskich do odbierania danych z gniazda.

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

Parametry

  • lpBuf
    Bufor danych przychodzących.

  • nBufLen
    Długość lpBuf 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, odbioru 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ę.

  • WSAENOTCONN gniazdo nie jest podłączony.

  • WSAEINPROGRESS jest wykonywana operacja blokująca Windows Sockets.

  • 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 odbioru na gnieździe po ShutDown została przywołana z nHow ustawiona na 0 lub 2.

  • WSAEWOULDBLOCK gniazdo jest oznaczony jako nieblokujących i odbioru Operacja spowodowałaby zablokowanie.

  • WSAEMSGSIZE datagram jest zbyt duży do buforu i został obcięty.

  • WSAEINVAL z nie powiązano gniazdo powiązania.

  • 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 jest używany dla strumienia połączonych lub datagram sockets i jest używany do odczytywania danych przychodzących.

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.

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 datagram, nadmiar dane zostaną utracone, a odbierania zwraca wartość SOCKET_ERROR z kodem błędu ustaw WSAEMSGSIZE.Jeśli przychodzące dane są niedostępne w gnieździe wartość SOCKET_ERROR zwracany jest kod błędu ustaw WSAEWOULDBLOCK.OnReceive funkcji 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, odbioru natychmiast zakończy się 0 bajtów odebranych.Jeśli połączenie zostało zresetowane, odbioru powiedzie się z powodu błędu WSAECONNRESET.

Otrzymywać należy wywołać tylko raz dla każdej godziny CAsyncSocket::OnReceive jest wywoływana.

Przykład

Zobacz przykład dla CAsyncSocket::OnReceive.

Wymagania

Nagłówek: afxsock.h

Zobacz też

Informacje

Klasa CAsyncSocket

Diagram hierarchii

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send