Compartir a través de


Windows Sockets: Notificaciones de Socket

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

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

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

  • OnAccept: notifica a este socket de escucha que puede aceptar solicitudes de conexión pendientes mediante una llamada 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 con un 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" para enviar. Los datos fuera de banda son un canal lógicamente 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, que no se recomienda a los usuarios de la clase CSocket. Es más fácil crear un segundo socket para pasar esos datos. Para obtener más información sobre datos fuera de banda, vea la especificación de Windows Sockets, disponible en Windows SDK.

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

Estas funciones son funciones de devolución de llamada reemplazables. CAsyncSocket y CSocket convierten mensajes en notificaciones, pero debe implementar cómo responden las funciones de notificación si quiere usarlas. Se llama a las funciones de notificación en el momento en que el socket recibe la notificación de un evento de interés, como la presencia de datos para leer.

MFC llama a las funciones de notificación para que se pueda personalizar el comportamiento del socket en el momento en que recibe la notificación. Por ejemplo, puede llamar a Receive desde la función de notificación OnReceive, es decir, al recibir una notificación de que hay datos para leer, se llama a Receive para que los lea. Este enfoque no es necesario, aunque 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 si invalida las funciones de notificación de una clase de socket derivada y proporciona una implementación.

Durante una operación como la recepción o el envío de datos, un objeto CSocket 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 quiere. (Por ejemplo, durante una llamada Receive, el socket quiere una notificación de lectura). Una vez que el socket completa su operación sincrónica y se vuelve asincrónica de nuevo, 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 se devuelve cuando se completa la conexión (ya sea correctamente o con error). La forma en que se controlan las notificaciones de conexión es un detalle de implementación de MFC.

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

Para más información, consulte:

Consulte también

Windows Sockets en MFC