서버에서 입력 파이프 구현

서버로 데이터 전송을 시작하기 위해 클라이언트는 서버의 원격 프로시저 중 하나를 호출합니다. 이 프로시저는 서버의 스텁에서 끌어오기 프로시저를 반복적으로 호출해야 합니다. MIDL 컴파일러는 애플리케이션의 IDL 파일을 사용하여 서버의 끌어오기 프로시저를 자동으로 생성합니다.

서버 프로그램이 스텁에서 끌어오기 프로시저를 호출할 때마다 끌어오기 프로시저는 클라이언트에서 데이터 블록을 받습니다. 데이터를 서버의 버퍼로 숨기지 않습니다. 그러면 서버의 원격 프로시저가 필요한 방식으로 이 데이터를 처리할 수 있습니다. 루프는 서버가 길이가 0인 버퍼를 받을 때까지 계속됩니다.

다음 예제는 SDK(플랫폼 소프트웨어 개발 키트)와 함께 제공되는 샘플에 포함된 Pipedemo 프로그램에서 나온 것입니다. 파이프를 사용하여 클라이언트에서 서버로 데이터를 끌어오는 원격 서버 프로시저를 보여 줍니다.

//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