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