服务器端上 RPC 的中间层

通常,服务器会注册每个过程,然后进入等待服务请求的无限循环。 因为只有一个过程要注册,所以服务器消息的主体将如下所示:

#include <stdio.h>
#include <rpc/rpc.h>
#include <utmp.h>
#include <rpcsvc/rusers.h>

char *nuser();

main()
{
    registerrpc(RUSERSPROG, RUSERSVERS, RUSERSPROC_NUM,
        nuser, xdr_void, xdr_u_long);
    svc_run();        /* Never returns */
    fprintf(stderr, "Error: svc_run returned!\n");
    exit(1);
}

registerrpc 例程将 C 过程注册为对应于给定 RPC 过程号。 前三个参数,RUSERSPROG,RUSERSVERSRUSERSPROC_NUM,指定要注册的远程过程的程序,版本和过程号。 该nuser参数是实现远程过程的本地过程的名称,xdr_voidxdr_u_long参数分别是远程过程的自变量和结果的 eXternal 数据表示 (XDR) 过滤器。