Compartir a través de


Windows Sockets: Notificaciones de socket

En este artículo se describen las funciones de notificación en las clases de socket. Estas funciones miembro son funciones de devolución de llamada que el marco llama a para notificar al objeto de socket de eventos importantes. Las funciones de notificación son:

  • OnReceive: notifica a este socket que hay datos en el búfer para que los recupere llamando a Receive.

  • OnSend: notifica a este socket que ahora puede enviar datos llamando a Send.

  • OnAccept: notifica a este socket de escucha que puede aceptar solicitudes de conexión pendientes llamando a Accept.

  • OnConnect: notifica a este socket de conexión que se ha completado su intento de conexión: quizás correctamente o quizás en error.

  • OnClose: notifica a este socket que el socket al que está conectado se ha cerrado.

    Nota:

    Una función de notificación adicional es OnOutOfBandData. Esta notificación indica al socket receptor que el socket de envío tiene datos "fuera de banda" que se van a enviar. Los datos fuera de banda son un canal lógico independiente asociado a cada par de sockets de flujo conectados. Normalmente, el canal fuera de banda se usa para enviar datos "urgentes". MFC admite datos fuera de banda. Es posible que los usuarios avanzados que trabajan con la clase CAsyncSocket necesiten usar el canal fuera de banda, pero no se recomienda que los usuarios de la clase CSocket lo usen. Es más fácil crear un segundo socket para pasar esos datos. Para obtener más información sobre los datos fuera de banda, consulte la especificación de Windows Sockets, disponible en Windows SDK.

Si deriva de la clase CAsyncSocket, debe invalidar las funciones de notificación para esos eventos de red de interés para la aplicación. Si deriva una clase de la clase CSocket, es su elección si invalida las funciones de notificación de interés. También puede usarse CSocket , en cuyo caso las funciones de notificación no hacen nada de forma predeterminada.

Estas funciones son funciones de devolución de llamada reemplazables. CAsyncSocket y CSocket convertir mensajes en notificaciones, pero debe implementar cómo responden las funciones de notificación si desea usarlas. Las funciones de notificación se llaman en el momento en que el socket recibe una notificación de un evento de interés, como la presencia de datos que se van a leer.

MFC llama a las funciones de notificación para permitirle personalizar el comportamiento del socket en el momento en que se le notifica. Por ejemplo, puede llamar Receive desde la OnReceive función de notificación, es decir, al recibir una notificación de que hay datos que se van a leer, se llama Receive a para leerlo. Este enfoque no es necesario, pero es un escenario válido. Como alternativa, puede usar la función de notificación para realizar un seguimiento del progreso, imprimir mensajes TRACE , etc.

Puede aprovechar estas notificaciones invalidando las funciones de notificación en una clase de socket derivada y proporcionando una implementación.

Durante una operación como recibir o enviar datos, un CSocket objeto se vuelve sincrónico. Durante el estado sincrónico, las notificaciones destinadas a otros sockets se ponen en cola mientras el socket actual espera la notificación que desea. (Por ejemplo, durante una Receive llamada, el socket quiere que se lea una notificación). Una vez que el socket completa su operación sincrónica y vuelve a ser asincrónica, otros sockets pueden empezar a recibir las notificaciones en cola.

Nota:

En CSocket, nunca se llama a la función de notificación OnConnect. En el caso de las conexiones, llame a Connect, que devolverá cuando se complete la conexión (ya sea correctamente o en error). La forma en que se controlan las notificaciones de conexión es un detalle de implementación de MFC.

Para obtener más información sobre cada función de notificación, consulte la función en la clase CAsyncSocket en la referencia de MFC. Para obtener código fuente e información sobre ejemplos de MFC, consulte Ejemplos de MFC.

Para obtener más información, consulte:

Consulte también

Windows Sockets en MFC