Compartilhar via


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:

Confira também

Windows Sockets em MFC