CAsyncSocket:: ReceiveFrom

int ReceiveFrom ( void * lpBuf, int nBufLen, CStringamp; rSocketAddress, UINT & rSocketPort, int nFlags = 0 );

int ReceiveFrom ( void * lpBuf, int nBufLen, SOCKADDR * lpSockAddr, int * lpSockAddrLen, int nFlags = 0 );

Valor de retorno

Se nenhum erro ocorrer, ReceiveFrom retorna o número de bytes recebidos. Se a conexão foi fechada, ele retornará 0. Caso contrário, será retornado um valor de SOCKET_ERROR e um código de erro específicas pode ser recuperado chamando GetLastError. Os seguintes erros aplicam para esta função de membro:

Parâmetros

lpBuf

Um buffer para os dados de entrada.

nBufLen

O comprimento do lpBuf em bytes.

rSocketAddress

Referência a um objeto CString que recebe um endereço IP número pontilhado.

rSocketPort

Referência a um UINT que armazena uma porta.

lpSockAddr

Um ponteiro para uma estrutura SOCKADDR que contém o endereço de origem ao retornar.

lpSockAddrLen

Um ponteiro para o comprimento do endereço origem em lpSockAddr em bytes.

nFlags

Especifica a maneira na qual o chamar é feita. A semântica desta função é determinada pelas opções de soquete e o parâmetro nFlags . O segundo é construído pela combinação de qualquer um dos seguintes valores com o operador de C++ ou:

Observações

Chame essa função de membro para receber uma datagrama e armazenar o endereço de origem na estrutura SOCKADDRrSocketAddress. Essa função é usada para ler dados de entrada em um soquete (possivelmente conectado) e capturar o endereço do qual os dados foram enviados.

Para soquetes do tipo SOCK_STREAM, o máximo de informações como está atualmente disponível para o tamanho da reserva fornecida é retornado. Se o soquete foi configurado para recepção em linha de dados fora de banda (opção Soquete SO_OOBINLINE) e dados fora de banda são não lidos, apenas fora-de-banda dados serão retornados. O aplicativo pode usar a opção deSIOCATMARK IOCtlou OnOutOfBandData para determinar se os dados fora de banda mais permanecem para ser lido. Os parâmetros de lpSockAddr e lpSockAddrLen serão ignorados para SOCK_STREAM soquetes .

Para datagrama soquetes, dados são extraídos do datagrama enfileirados primeiro, up to o tamanho da reserva fornecida. Se o datagrama for maior do que o buffer fornecido, o buffer é preenchido com a primeiro parte da mensagem, os dados em excesso serão perdidos e ReceiveFrom retorna um valor SOCKET_ERROR com o código de erro definido como WSAEMSGSIZE.

Se lpSockAddr é diferente de zero, e o soquete é do tipo SOCK_DGRAM, o endereço de rede do soquete que enviou os dados é copiado para o correspondente SOCKADDR estrutura. O valor apontado pelo lpSockAddrLen é inicializado para o tamanho dessa estrutura e é modificado no retorno para indicar o tamanho real do endereço armazenado lá. Se nenhuma de entrada dados está disponível no soquete, o chamar ReceiveFrom aguarda dados para chegar a menos que seja o soquete de não bloqueio. Neste caso, um valor de SOCKET_ERROR será retornado com o código de erro definido como WSAEWOULDBLOCK. O retorno de chamada OnReceive pode ser usado para determinar quando chegarem mais dados.

Se o soquete é do tipo SOCK_STREAM e o lado remoto encerrou a conexão normalmente, um ReceiveFrom será concluída imediatamente com 0 bytes recebidos.

Visão geral de CAsyncSocket |nbsp; Membros de classe | Gráfico de hierarquia

Co&nsulte tambémnbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::Send

Index