广播远程过程调用示例
本节说明广播远程过程调用 (RPC) 示例。
以下示例说明广播 RPC:
#include <rpc/pmap_clnt.h>
...
enum clnt_stat clnt_stat;
...
clnt_stat = clnt_broadcast(prognum, versnum, procnum,
inproc, in, outproc, out, eachresult)
u_long prognum; /* program number */
u_long versnum; /* version number */
u_long procnum; /* procedure number */
xdrproc_t inpro /* xdr routine for args */
caddr_t in; /* pointer to args */
xdrproc_t outproc /* xdr routine for results */
caddr_t out; /* pointer to results */
bool_t (*eachresult)();/* call with each result gotten */
每次获取结果时,都会调用 eachresult 过程。 此过程返回一个布尔值,用于指示调用者是否需要更多响应。
bool_t done;
...
done = eachresult(resultsp, raddr)
caddr_t resultsp;
struct sockaddr_in *raddr; /* Addr of responding machine */
如果done参数返回值 True ,然后广播停止,并且 clnt_broadcast 例程成功返回。 否则,例程将等待另一个响应。 请求将在等待几秒钟后重新广播。 如果没有返回响应,那么例程将返回值 RPC_TIMEDOUT。