ONC+ Developer's Guide

Example Service Described in the RPC Language

The following code example shows the specification of a simple ping program.


Example B–4 ping Service Using RPC Language

/*
 * Simple ping program
 */
program PING_PROG {
 	version PING_VERS_PINGBACK {
 		void		
 		PINGPROC_NULL(void) = 0;
 		/*
		 * ping the caller, return the round-trip time
		 * in milliseconds. Return a minus one (-1) if
 		 * operation times-out
		 */
		int
 		PINGPROC_PINGBACK(void) = 1;
 		/* void - above is an argument to the call */
 	} = 2;
/*
 * Original version
 */
 	version PING_VERS_ORIG {
 		void
 		PINGPROC_NULL(void) = 0;
 	} = 1;
} = 200000;	
const PING_VERS = 2; /* latest version */

The first version described is PING_VERS_PINGBACK with two procedures, PINGPROC_NULL and PINGPROC_PINGBACK.

PINGPROC_NULL takes no arguments and returns no results, but it is useful for such things as computing round-trip times from the client to the server and back again. By convention, procedure 0 of any RPC program should have the same semantics, and never require authentication.

The second procedure returns the amount of time in microseconds that the operation used.

The next version, PING_VERS_ORIG, is the original version of the protocol and does not contain the PINGPROC_PINGBACK procedure. It is useful for compatibility with old client programs.