Writing the RPC Server using XDR

来源:互联网 发布:日股 软件 编辑:程序博客网 时间:2024/05/03 18:26
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)

原创粉丝点击