linux rpc在内核中实现,源代码位置是net/sunrpc/
sunrpc不仅实现了rpc的调度,同时将rpc请求构造解析发送接受的通用部分进行了提取。要定义自己的rpc调用仅需要实现那些非通用的部分,下面简要介绍怎么实现一个自己的rpc客户端(2.4内核)
主要数据结构介绍
1。rpc请求
/*
* This is the RPC buffer
*/
struct rpc_iov {
struct iovec io_vec[MAX_IOVEC]; //使用10个 iovec 可以操作分散的buffer
unsigned int io_nr;
unsigned int io_len;
};
/*
* This describes a complete RPC request
*/
struct rpc_rqst {
/*
* This is the user-visible part
*/
struct rpc_xprt * rq_xprt; /* RPC client */
struct rpc_timeout rq_timeout; /* timeout parms */
struct rpc_iov rq_snd_buf; /* send buffer 发送缓冲区*/
struct rpc_iov rq_rcv_buf; /* recv buffer 接受缓冲区*/
/*
* This is the private part
*/
struct rpc_task * rq_task; /* RPC task data */
__u32 rq_xid; /* request XID */
struct rpc_rqst * rq_next; /* free list */
volatile unsigned char rq_received : 1;/* receive completed */
/*
* For authentication (e.g. auth_des)
*/
u3