CAsyncSocket::ReceiveFrom

telefonar Essa função de membro para receber um datagrama e armazenar o endereço de fonte no SOCKADDR estrutura ou em rSocketAddress.

int ReceiveFrom(
   void* lpBuf,
   int nBufLen,
   CString& rSocketAddress,
   UINT& rSocketPort,
   int nFlags = 0 
);
int ReceiveFrom(
   void* lpBuf,
   int nBufLen,
   SOCKADDR* lpSockAddr,
   int* lpSockAddrLen,
   int nFlags = 0 
);

Parâmetros

  • lpBuf
    Um buffer de dados de entrada.

  • nBufLen
    O comprimento de lpBuf em bytes.

  • rSocketAddress
    Referência a um CString objeto que recebe um endereço IP numérico pontilhado.

  • rSocketPort
    Referência a um UINT que armazena uma porta.

  • lpSockAddr
    Um ponteiro para um SOCKADDR estrutura que contém o endereço de fonte após retornar.

  • lpSockAddrLen
    Um ponteiro para o tamanho do endereço de fonte em lpSockAddr em bytes.

  • nFlags
    Especifica a maneira na qual a telefonar é feita.A semântica dessa função é determinada pelas opções de soquete e o nFlags parâmetro. A segunda é construída pela combinação de qualquer um dos seguintes valores com o C++ OR operador:

    • MSG_PEEK   Inspecione os dados de entrada.Os dados são copiados para o buffer, mas não são removidos da fila de entrada.

    • MSG_OOB   Processar dados fora de banda.

Valor de retorno

Se não houver erro, ReceiveFrom Retorna o número de bytes recebidos. Se a conexão foi fechada, ela retornará 0.Caso contrário, um valor de SOCKET_ERROR é retornado e um código de erro específico pode ser recuperado chamando GetLastError. Os seguintes erros se aplicam a essa função de membro:

  • WSANOTINITIALISED   Um bem-sucedida AfxSocketInit deve ocorrer antes de usar essa API.

  • WSAENETDOWN   A implementação do Windows Sockets detectou que o subsistema de rede falhou.

  • WSAEFAULT   The lpSockAddrLen argumento inválido: the lpSockAddr buffer era muito pequeno para acomodar o endereço de mesmo nível.

  • WSAEINPROGRESS   Uma operação de bloqueio de Windows Sockets está em andamento.

  • WSAEINVAL   O soquete não foi limite com BIND.

  • WSAENOTCONN   O soquete não está conectado (SOCK_STREAM only).

  • WSAENOTSOCK   O descritor não é um soquete.

  • WSAEOPNOTSUPP   MSG_OOB foi especificado, mas o soquete não é do tipo SOCK_STREAM.

  • WSAESHUTDOWN   O soquete foi desligado; não é possível chamar ReceiveFrom em um soquete após ShutDown foi chamado com nHow definido como 0 ou 2.

  • WSAEWOULDBLOCK   O soquete está marcado sistema autônomo não bloqueadas e o ReceiveFrom operação bloquearia.

  • WSAEMSGSIZE   O datagrama era muito grande ajuste no buffer especificado e foi truncado.

  • WSAECONNABORTED   O circuito virtual foi anulado devido ao tempo limite ou Outros falha.

  • WSAECONNRESET   O circuito virtual foi redefinido pelo lado remoto.

Comentários

Esta função é usada para ler dados de entrada em um soquete (possivelmente conectado) e capturar o endereço do qual os dados foi enviados.

Para lidar com endereços IPv6, use CAsyncSocket::ReceiveFromEx.

Para soquetes do tipo SOCK_STREAM, sistema autônomo informações está disponível no momento para o dimensionar do buffer fornecido é retornado.Se o soquete foi configurado para recepção de in-linha de dados fora de banda (soquete opção SO_OOBINLINE) e dados fora de banda não lidos, out-of-band somente os dados serão retornados.The application can use the IOCtl SIOCATMARK option or OnOutOfBandData to determine whether any more out-of-band data remains to be read.The lpSockAddr e lpSockAddrLen parâmetros são ignorados para SOCK_STREAM soquetes.

Para soquetes do datagrama, dados são extraídos do datagrama enfileirado primeiro, backup para o dimensionar do buffer fornecido.Se o datagrama é maior do que o buffer fornecido, o buffer é preenchido com a primeira parte da mensagem, os dados em excesso serão perdidos e ReceiveFrom Retorna um valor SOCKET_ERROR com o código de erro conjunto para WSAEMSGSIZE.

If lpSockAddr é diferente de zero, e o soquete é do tipo SOCK_DGRAM, o endereço de rede do soquete que enviou os dados são copiados para o correspondente SOCKADDR estrutura.O valor apontada por lpSockAddrLen é inicializado para o dimensionar dessa estrutura e modificado no retorno para indicar o dimensionar real do endereço armazenado nesse local. Se nenhum dado de entrada estiver disponível no soquete, o ReceiveFrom chamar aguarda para que os dados chegam a menos que seja o soquete não bloqueadas. Neste caso, um valor de SOCKET_ERROR é retornado com o código de erro definido como WSAEWOULDBLOCK.The OnReceive retorno de chamada pode ser usado para determinar quando chegam mais dados.

Se o soquete de digite SOCK_STREAM e o lado remoto encerrou a conexão normalmente, um ReceiveFrom concluirá imediatamente com 0 bytes recebidos.

Requisitos

Cabeçalho: afxsock.h

Consulte também

Referência

Classe CAsyncSocket

Gráfico de hierarquia

CAsyncSocket::AsyncSelect

CAsyncSocket::criar

CAsyncSocket::Receive

CAsyncSocket::enviar

Outros recursos

CAsyncSocket membros