广播远程过程调用示例

本节说明广播远程过程调用 (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