Programming with Remote Procedure Calls (RPC)

Levels of the RPC package

The RPC interface can be seen as being divided into several distinct levels. The highest level is general, and provides for no fine control of any kind. The lower levels (four can be usefully distinguished) are available for use as necessary, and provide increasingly detailed levels of control. Programmers should only go down to the level necessary for the control needed.

NOTE: For a complete specification of the routines in the RPC library, see rpc(NS) and related manual pages.

In the ``simplified interface'', you do not need to consider the characteristics of the underlying transport, operating system, or other low-level implementation mechanisms. Programmers simply make remote procedure calls to routines on other machines, and need specify only the type of transport that they wish to use. The selling point here is simplicity. It is this level that allows RPC to pass the ``hello world'' test -- that simple things should be simple. The routines at this level are used for most applications.

Included in the simplified interface are only three basic RPC routines:

rpc_reg registers a routine as an RPC routine and obtains a unique, system-wide procedure-identification number for it.

Given such a unique, system-wide procedure-identification number, rpc_call uses it to make a remote call to that routine on a specified host.

Like rpc_call, except that it broadcasts its call message across all transports of the specified type.
At the ``top level'', the interface is still simple, but the programmer does have to create client and server handles before making a call. Like the routines in the simplified interface, the routines here require a nettype argument that specifies a general class (type) of transports.

The top level essentially consists of two routines:

The generic client creation. The programmer tells clnt_create where the server is located and the type of transport to use to get to it.

Creates server handles for all the transports of the specified nettype. The programmer tells svc_create which dispatch function should be used.
The simplified interface and the top level of RPC, while simple, do not allow the choice of a specific transport (but see the following discussion of NETPATH). At these levels, all routines take a nettype argument, which serves to define the class of transport to be used. On the client side, programs do network selection, and hence may be slightly inefficient depending on the nettype. On the server side, programs may have to listen on many transports, and hence may waste system resources.

In both of these cases, however, efficiency can be improved by judicious assignment to the NETPATH environment variable. If the programmer wishes the application to run on all transports, this is the interface that should be used.

The ``intermediate interface'' of RPC, and the two interfaces below it, allow many details to be controlled by the programmer, and for that reason their use is necessary for special applications. Programs written at these lower levels are more complicated, but also more efficient.

The intermediate differs from the two levels above it in that it allows the programmer to specify directly the transport to be used. It consists of two routines:

Creates a client handle for a specified transport.

Likewise, svc_tp_create creates a server handle for a specified transport.

The ``expert level'' consists of a larger set of routines with which the programmer can specify more parameters, but those parameters are still all directly transport related. It includes the following routines:

Creates a client handle for a specified transport, allowing fine control of the client characteristics.

Creates a server handle for a specified transport, allowing fine control of the server characteristics.

Provides a programmatic interface to rpcbind, one that establishes a mapping between an RPC service and a network address.

Destroys a mapping of the type established by rpcb_set.

Provides a programmatic interface to rpcbind, one that returns the transport address of specified RPC service.

Associates a given program and version number pair with a given dispatch routine.

Destroys an association of the type established by svc_reg.
The ``bottom level'' consists of routines called when the programmer requires full control, even down to the smallest details of transport options. It consists of the following routines:

Creates an RPC client for the specified remote program, using a connectionless transport.

Creates an RPC server handle, using a connectionless transport.

Creates an RPC client for the specified remote program, using a connection-oriented transport.

Creates an RPC server handle, using a connection-oriented transport.

© 2005 The SCO Group, Inc. All rights reserved.
SCO OpenServer Release 6.0.0 -- 02 June 2005