Windows Sockets: notificações de soquete
Este artigo descreve as funções de notificação nas classes de soquete. Essas funções de membro são funções de retorno de chamada que a estrutura chama para notificar o objeto de soquete de eventos importantes. As funções de notificação são:
OnReceive: notifica esse soquete de que há dados no buffer para que ele seja recuperado chamando Receive.
OnSend: notifica esse soquete de que agora ele pode enviar dados chamando Send.
OnAccept: notifica um soquete de escuta de que ele pode aceitar solicitações de conexão pendentes chamando Accept.
OnConnect: notifica esse soquete de conexão de que sua tentativa de conexão foi concluída: talvez com êxito ou talvez com erro.
OnClose: notifica esse soquete de que o soquete ao qual ele está conectado foi fechado.
Observação
Uma função de notificação adicional é OnOutOfBandData. Essa notificação informa ao soquete de recebimento de que o soquete de envio tem dados "fora de banda" a serem enviados. Os dados fora de banda são um canal logicamente independente associado a cada par de soquetes de fluxo conectados. O canal fora de banda normalmente é usado para enviar dados "urgentes". A MFC dá suporte a dados fora de banda. Os usuários avançados que trabalham com a classe CAsyncSocket podem precisar usar o canal fora de banda, mas os usuários da classe CSocket não podem usá-lo. A maneira mais fácil é criar um segundo soquete para passar esses dados. Para obter mais informações sobre dados fora de banda, confira a especificação de Soquetes do Windows, disponível no SDK do Windows.
Se você derivar da classe CAsyncSocket
, deverá substituir as funções de notificação para esses eventos de rede de interesse para seu aplicativo. Se você derivar uma classe da classe CSocket
, será sua escolha substituir as funções de notificação de interesse. Você também pode usar CSocket
. Nesse caso, as funções de notificação não podem fazer nada.
Essas funções são funções de retorno de chamada substituíveis. CAsyncSocket
e CSocket
convertem mensagens em notificações, mas você deverá implementar como as funções de notificação respondem se desejar usá-las. As funções de notificação são chamadas no momento que seu soquete é notificado de um evento de interesse, como a presença de dados a serem lidos.
A MFC chama as funções de notificação para permitir que você personalize o comportamento do soquete no momento que ele é notificado. Por exemplo, você pode chamar Receive
de sua função de notificação OnReceive
, ou seja, ao ser notificado de que há dados a serem lidos, você chama Receive
para lê-lo. Essa abordagem não é necessária, mas é um cenário válido. Como alternativa, você pode usar sua função de notificação para acompanhar o progresso, imprimir mensagens TRACE e assim por diante.
Você pode aproveitar essas notificações substituindo as funções de notificação em uma classe de soquete derivada e fornecendo uma implementação.
Durante uma operação, como receber ou enviar dados, um objeto CSocket
se torna síncrono. Durante o estado síncrono, todas as notificações destinadas a outros soquetes são enfileiradas enquanto o soquete atual aguarda a notificação desejada. (Por exemplo, durante uma chamada Receive
, o soquete deseja que uma notificação seja lida.) Depois que o soquete concluir sua operação síncrona e se tornar assíncrono novamente, outros soquetes poderão começar a receber as notificações enfileiradas.
Observação
Em CSocket
, a função de notificação OnConnect
nunca é chamada. Para conexões, chame Connect
, que retornará quando a conexão for concluída (com êxito ou erro). A forma como as notificações de conexão são tratadas é um detalhe de implementação do MFC.
Para obter detalhes sobre cada função de notificação, confira a função na classe CAsyncSocket
na Referência da MFC. Para obter código-fonte e informações sobre exemplos da MFC, confira Exemplos da MFC.
Para saber mais, veja: