| Title and Copyright Information |
| About This Manual |
| Audience |
| Organization |
| New and Changed Information |
| Related Documents |
| Reader's Comments |
| Conventions |
| 1 | Introduction to Remote Procedure Calls |
| 1.1 | The RPC Model |
| 1.2 | RPC Procedure Versions |
| 1.3 | Using portmap to Determine the Destination Port Number of RPC Packets |
| 1.4 | RPC Independence from Transport Protocol |
| 1.5 | External Data Representation (XDR) |
| 1.6 | Using rpcinfo to Get RPC Registration Information |
| 1.7 | Assigning Program Numbers |
| 2 | Writing RPC Applications with the rpcgen Protocol Compiler |
| 2.1 | Simple Example: Using rpcgen to Generate Client and Server RPC Code |
| 2.1.1 | RPC Protocol Specification File Describing Remote Procedure |
| 2.1.2 | Implementing the Procedure Declared in the Protocol Specification |
| 2.1.3 | The Client Program That Calls the Remote Procedure |
| 2.1.4 | Running rpcgen |
| 2.1.5 | Compiling the Client and Server Programs |
| 2.1.6 | Copying the Server to a Remote Machine and Running It |
| 2.2 | Advanced Example: Using rpcgen to Generate XDR Routines |
| 2.2.1 | The RPC Protocol Specification |
| 2.2.2 | Implementing the Procedure Declared in the Protocol Specification |
| 2.2.3 | The Client Program that Calls the Remote Procedure |
| 2.2.4 | Running rpcgen |
| 2.2.5 | Compiling the File of XDR Routines |
| 2.2.6 | Compiling the Client Side Program with rpcgen Output |
| 2.2.7 | Compiling the Server Side Program with rpcgen Output |
| 2.2.8 | Running the Remote Directory Program |
| 2.3 | Debugging Applications |
| 2.4 | The C-Preprocessor |
| 2.5 | rpcgen Programming |
| 2.5.1 | Network Types |
| 2.5.2 | User-Provided Define Statements |
| 2.5.3 | inetd Support |
| 2.5.4 | Dispatch Tables |
| 2.6 | Client Programming |
| 2.6.1 | Timeout Changes |
| 2.6.2 | Client Authentication |
| 2.7 | Server Programming |
| 2.7.1 | Handling Broadcasts |
| 2.7.2 | Passing Data to Server Procedures |
| 2.8 | RPC and XDR Languages |
| 2.8.1 | Definitions |
| 2.8.2 | Enumerations |
| 2.8.3 | Typedefs |
| 2.8.4 | Constants |
| 2.8.5 | Declarations |
| 2.8.6 | Structures |
| 2.8.7 | Unions |
| 2.8.8 | Programs |
| 2.8.9 | Special Cases |
| 3 | RPC Programming Interface |
| 3.1 | RPC Layers |
| 3.1.1 | Middle Layer of RPC |
| 3.1.1.1 | Using callrpc |
| 3.1.1.2 | Using registerrpc |
| 3.1.1.3 | Passing Arbitrary Data Types |
| 3.1.1.4 | User-Defined Routines |
| 3.1.1.5 | XDR Serializing Defaults |
| 3.1.2 | Lowest Layer of RPC |
| 3.1.2.1 | The Server Side and the Lowest RPC Layer |
| 3.1.2.2 | The Client Side and the Lowest RPC Layer |
| 3.1.2.3 | Memory Allocation with XDR |
| 3.2 | Raw RPC |
| 3.3 | Miscellaneous RPC Features |
| 3.3.1 | Using Select on the Server Side |
| 3.3.2 | Broadcast RPC |
| 3.3.3 | Batching |
| 3.3.4 | Authentication of RPC Calls |
| 3.3.5 | Authentication Through the Operating System |
| 3.3.5.1 | The Client Side |
| 3.3.5.2 | The Server Side |
| 3.3.6 | Using the Internet Service Daemon (inetd) |
| 3.4 | Additional Examples |
| 3.4.1 | Program Versions on the Server Side |
| 3.4.2 | Program Versions on the Client Side |
| 3.4.3 | Using the TCP Transport |
| 3.4.4 | Callback Procedures |
| A | External Data Representation: Technical Notes |
| A.1 | Usefulness of XDR |
| A.1.1 | A Canonical Standard |
| A.1.2 | The XDR Library |
| A.1.3 | XDR Library Primitives |
| A.1.3.1 | Number Filters |
| A.1.3.2 | Floating Point Filters |
| A.1.3.3 | Enumeration Filters |
| A.1.3.4 | Possibility of No Data |
| A.1.3.5 | Constructed Data Type Filters |
| A.1.3.5.1 | Strings |
| A.1.3.5.2 | Byte Arrays |
| A.1.3.5.3 | Arrays |
| A.1.3.5.4 | Opaque Data |
| A.1.3.5.5 | Arrays of Fixed Size |
| A.1.3.5.6 | Discriminated Unions |
| A.1.3.5.7 | Pointers |
| A.1.4 | Non-filter Primitives |
| A.1.5 | XDR Operation Directions |
| A.1.6 | XDR Stream Access |
| A.1.6.1 | Standard I/O Streams |
| A.1.6.2 | Memory Streams |
| A.1.6.3 | Record (TCP/IP) Streams |
| A.1.7 | XDR Stream Implementation |
| A.2 | Advanced Topics |
| Examples |
| 2-1 | Printing a Remote Message Without ONC RPC |
| 2-2 | RPC Protocol Specification File, Simple Example |
| 2-3 | Remote Procedure Definition |
| 2-4 | Client Program that Calls the Remote Procedure |
| 2-5 | RPC Protocol Specification File, Advanced Example |
| 2-6 | Remote Procedure Implementation |
| 2-7 | Client Program that Calls the Server |
| 2-8 | Using the Percent Sign to Bypass Interpretation of a Line |
| 2-9 | Locating a Procedure in a Dispatch Table |
| 2-10 | Using the clnt_control Routine |
| 2-11 | XDR enum Before Compilation |
| 2-12 | C enum Resulting from Compiling XDR enum |
| 2-13 | RPC Program Illustrating Time Protocol |
| 3-1 | Using callrpc |
| 3-2 | Remote Server Procedure |
| 3-3 | Using registerrpc in the Main Body of a Server Program |
| 3-4 | Server Program Using Lowest Layer of RPC |
| 3-5 | Using Lowest RPC Layer to Control Data Transport and Delivery |
| 3-6 | Debugging and Testing Noncommunication Parts of an Application |
| 3-7 | Batching RPC Messages |
| 3-8 | Client Batching |
| 3-9 | Modifying the Remote Users Service |
| 3-10 | C Procedure that Returns Two Different Data Types |
| 3-11 | Determining Server-Supported Versions and Creating Associated Client Handles |
| 3-12 | RPC Call That Uses TCP Protocol |
| 3-13 | Client-Server Usage of gettransient Routine |
| A-1 | Revised Version of writer.c |
| A-2 | Revised Version of reader.c |
| Figures |
| 1-1 | Basic Network Communication with Remote Procedure Call |
| Index |