CAsyncSocket::Receive
Chamar essa função de membro para receber dados de um soquete.
virtual int Receive(
void* lpBuf,
int nBufLen,
int nFlags = 0
);
Parâmetros
lpBuf
Um buffer para os dados de entrada.nBufLen
O comprimento de lpBuf em bytes.nFlags
Especifica a maneira na qual o chamada é feita.A semântica de essa função é determinada pelas opções de soquete e pelo parâmetro de nFlags .O segundo é construído combinando alguns dos seguintes valores com o operador de OR C++:Auge deMSG_PEEK nos dados de entrada.Os dados são copiados para o buffer mas não removidos da fila de entrada.
Dados de banda fora de processo deMSG_OOB .
Valor de retorno
Se nenhum erro ocorre, Receber retorna o número de bytes recebidos.Se a conexão foi fechada, 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 A AfxSocketInit com êxito deve ocorrer antes de usar este API.
WSAENETDOWN a implementação da do windows detectou que o subsistema de rede falhou.
WSAENOTCONN o soquete não está conectado.
A operação de soquetes do windows de bloqueio deWSAEINPROGRESS A está em andamento.
WSAENOTSOCK o descritor não for um soquete.
WSAEOPNOTSUPP MSG_OOB foi especificado, mas o soquete não é do tipo SOCK_STREAM.
WSAESHUTDOWN o soquete foi fechada; não é possível chamar Receber em um soquete após ShutDown foi chamado com nHow definido como 0 ou 2.
WSAEWOULDBLOCK o soquete é marcado como nonblocking e a operação de Receber bloquearia.
WSAEMSGSIZE a datagrama foi muito grande caber no buffer foi especificado e truncado.
WSAEINVAL o soquete não foi associado com Ligar.
WSAECONNABORTED o circuito virtual foi anuladas devido ao tempo limite ou outra falha.
WSAECONNRESET o circuito virtual foi redefinido pelo lado do servidor remoto.
Comentários
Essa função é usada para os soquetes conectados de fluxo ou de datagrama e usada para ler dados de entrada.
Para os soquetes de tipo SOCK_STREAM, tanta informação quanto está disponível no momento até o tamanho do buffer fornecido é retornada.Se o soquete foi configurado para receptor in-line de dados fora de banda (padrão SO_OOBINLINEde soquete) e os dados fora de banda são unread, somente os dados fora de banda serão retornados.O aplicativo pode usar a opção ou OnOutOfBandData de IOCtlSIOCATMARK determinar se any outras dados fora de banda permanecem ser lidos.
Para os soquetes de datagrama, os dados são extraídos da primeira datagrama enviada para a fila, até o tamanho do buffer fornecido.Se a datagrama é maior do que o buffer fornecido, o buffer é preenchido com a primeira parte de datagrama, os dados adicionais são perdidos, e retornos de Receber um valor de SOCKET_ERROR com o código de erro definido como WSAEMSGSIZE.Se nenhum dados de entrada está disponível em soquete, um valor de SOCKET_ERROR é retornado pelo código de erro definido como WSAEWOULDBLOCK.A função de retorno de chamada de OnReceive pode ser usada para determinar quando dados mais chegam.
Se o soquete é do tipo SOCK_STREAM e o lado do servidor remoto desliga graciosamente a conexão, Receber concluirá imediatamente com os 0 bytes recebidos.Se a conexão redefinido, Receber falhará com o erro WSAECONNRESET.
Receber deve ser chamado somente uma vez para cada vez que CAsyncSocket::OnReceive é chamado.
Exemplo
Consulte o exemplo para CAsyncSocket::OnReceive.
Requisitos
Cabeçalho: afxsock.h