Implementación de canalizaciones de entrada en el servidor

Para empezar a enviar datos a un servidor, un cliente llama a uno de los procedimientos remotos del servidor. Este procedimiento debe llamar repetidamente al procedimiento de extracción en el código auxiliar del servidor. El compilador MIDL usa el archivo IDL de la aplicación para generar automáticamente el procedimiento de extracción del servidor.

Cada vez que el programa de servidor invoca el procedimiento de extracción en su código auxiliar, el procedimiento de extracción recibe bloques de datos del cliente. Desenlaza los datos en el búfer del servidor. Después, el procedimiento remoto del servidor puede procesar estos datos de cualquier manera necesaria. El bucle continúa hasta que el servidor recibe un búfer de longitud cero.

El ejemplo siguiente procede del programa Pipedemo incluido en los ejemplos que vienen con el Kit de desarrollo de software de plataforma (SDK). Ilustra un procedimiento de servidor remoto que usa una canalización para extraer datos del cliente al servidor.

//file: server.c (fragment)
#include uc_server.c
#define PIPE_TRANSFER_SIZE 100 /* Transfer 100 pipe elements at one time */
 
void InPipe(LONG_PIPE     long_pipe )
{
    long local_pipe_buf[PIPE_TRANSFER_SIZE];
    ulong actual_transfer_count = PIPE_TRANSFER_SIZE;
 
    while(actual_transfer_count > 0) /* Loop to get all 
                                        the pipe data elements */
    {
        long_pipe.pull( long_pipe.state,
                        local_pipe_buf,
                        PIPE_TRANSFER_SIZE,
                        &actual_transfer_count);
        /* process the elements */
    } // end while
} //end InPipe