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