Writing the RPC Server using XDR

Create "llist_svc_proc.c" to hold the server code. I #included llist.h, copied over the prototypes, and implemented the server as follows: 

int result;

/* print out a list, returning the number of items printed */
int *print_list_1_svc(list *lst, struct svc_req *req)
{
    list *ptr;

    ptr = lst;
    result = 0;
    while (ptr != NULL) {
        printf("{%s, ", ptr->data);
        printf("%d, ", ptr->key);
        switch (ptr->col) {
        case ORANGE: printf("orange"); break;
        case PUCE: printf("puce"); break;
        case TURQUOISE: printf("turquoise");
        }
        printf("}\n");
        result++;
        ptr = ptr->next;
    }
    return &result;
}

int *sum_list_1_svc(list *lst, struct svc_req *req)
{
    list *ptr;

    ptr = lst;
    result = 0;
    while (ptr != NULL) {
        result += ptr->key;
        ptr = ptr->next;
    }
    return &result;

}

Note the quirky return values: rpcgen asked us to write functions that return pointers to their integer results, not the integers themselves. To comply, I had to create a global variable. Note that this pointer, "&result", is not getting sent over the network; it is merely being passed to some XDR function in our address space to be dealt with. If you'd like to peek at the mechanism that controls this process, read llist_svc.c. You might be disappointed; most of what goes on is actually handled by lower-level RPC library routines such as "svc_getargs()" and "svc_sendreply()". 

(http://www.cprogramming.com/tutorial/rpc/remote_procedure_call_server.html)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值