recibir mensajes

En la ilustración siguiente se muestra el método para recibir mensajes del módulo de acceso dinámico (DMOD).

Imagen que muestra cómo recibir mensajes mediante un procedimiento de enrutamiento.
Recepción de mensajes a través de un procedimiento de enrutamiento

Después de la inicialización del módulo DMOD, el emulador 3270 registra el procedimiento de enrutamiento mediante una llamada a sepdrout. Cuando el módulo DMOD recibe un mensaje, llama al procedimiento de enrutamiento del emulador 3270, el que puede procesar el mensaje.

Con este enfoque, no hay ningún cambio de contexto entre el subproceso del módulo DMOD y el subproceso del emulador 3270. Sin embargo, el procedimiento de enrutamiento debe devolver el control al módulo DMOD rápidamente. Por ejemplo, no puede suspender la espera de una entrada de teclado.

La aplicación debe determinar si el mensaje recibido es para esta aplicación o para otra. Si el mensaje no es para esta aplicación, el procedimiento de enrutamiento lo debe devolver, indicando que el mensaje no se procesó. Si la aplicación procesa el mensaje, es responsable de liberar el búfer cuando finalice el procesamiento.

En algunos casos, el procedimiento de enrutamiento puede procesar el mensaje hasta su finalización. Una alternativa es que el procedimiento de enrutamiento coloque el mensaje en una cola de aplicación y, a continuación, borre un semáforo de la aplicación. De este modo, la aplicación puede procesar el mensaje.

El rendimiento se puede mejorar aún más mediante el envío de un mensaje Status-Resource (para devolver crédito al nodo local, lo que le permite enviar más datos) desde el procedimiento de enrutamiento cuando se recibe un mensaje, en lugar de esperar hasta que el mensaje se procese hasta su finalización. Este uso se muestra en el artículo sobre el código de ejemplo: inicialización y procedimiento de enrutamiento. Para más información sobre el crédito y el control de flujo, consulte Velocidad y fragmentación.

Una vez que la aplicación recibió un mensaje, es responsable del búfer en el que se recibió el mensaje. La aplicación debe volver a utilizar el búfer para enviar un mensaje (mediante sbpusend) o liberarlo (mediante sepdburl). Si el búfer que se va a volver a utilizar no contiene el número de elementos correcto para que se envíe el mensaje, la aplicación puede obtener elementos adicionales (mediante sbpibegt) o liberar los existentes (mediante sbpiberl). En este caso, la aplicación también debe asegurarse de que el campo numelts que se encuentra en el encabezado del búfer indique el número de elementos correcto.