Hello,Paolo and Stefanha In order to resolve OOM issue, I am trying wrap all APIs using sunrpc, need some suggestion before coding.
There are some different way to implement, not sure which would be better: 1 keep client as thin as possible, client stores opaque pointer used in server side, for eg, QBlockContext *ctx, client only get a pointer pointing to the address where server stores really the object. This have risk when server/client crash and reconnect. 2 client and server maintains index for QBlockContext and QBlockState. 3 thick client and server layer, expose all structure details in .x file, each API have a correspond rpc call. .x file may be complex. 4 define a custom protocol on XDR, like libvirt, this may need many code in server/client side. also with method 1-3, Consider wrapping following API: int qb_context_new(QBlockContext **context); The parameter context is a pointer that will be modified, it seems sunrpc does not transfer back modified parameter by server to client, so I need to define a structure as struct qb_context_new_ret { int ret; int opaque_len; char *opaque_val; } and use that as rpc call's return structure. In this way each API wrapped need a new defined internal structure make things complicate. so I am wondering if there is a better way to do it.