The following is an example of the specification of a simple ping program described in the Remote Procedure Call language (RPCL):
/* * Simple ping program */ program PING_PROG { /* Latest and greatest version */ version PING_VERS_PINGBACK { void PINGPROC_NULL(void) = 0;
/* * Ping the caller, return the round-trip time * (in microseconds). Returns -1 if the operation * timed out. */ int PINGPROC_PINGBACK(void) = 1; } = 2;
/* * Original version */ version PING_VERS_ORIG { void PINGPROC_NULL(void) = 0; } = 1; } = 1;
const PING_VERS = 2; /* latest version */
In this example, the first part of the ping program, PING_VERS_PINGBACK, consists of two procedures: PINGPROC_NULL and PINGPROC_PINGBACK. The PINGPROC_NULL procedure takes no arguments and returns no results. However, it is useful for computing round-trip times from the client to the server. By convention, procedure 0 of an RPC protocol should have the same semantics and require no kind of authentication. The second procedure, PINGPROC_PINGBACK, requests a reverse ping operation from the server. It returns the amount of time in microseconds that the operation used.
The second part, or original version of the ping program, PING_VERS_ORIG, does not contain the PINGPROC_PINGBACK procedure. The original version is useful for compatibility with older client programs. When the new ping program matures, this older version may be dropped from the protocol entirely.