Power Programming with RPC

Preface Scope of This Handbook Some Assumptions About the Reader Software Mentioned in This Book Examples Additional Sources of Information Conventions Acknowledgments Chapter 1: Introduction to Remote Procedure Calling Client /Server Computing Remote versus Local Procedure Calling RPC Application Development Defining the Protocol Developing Server and Client Application Code Compiling and Running the Application RPC Makes Interprocess Communications Less Painful How RPC Systems Work RPC Systems and the OSI Reference Model What is "State" and Why is it Important? Top Twenty Distributed Computing Terms and Acronyms Chapter 2: Network Computing Today Distributed Computing Standards Features of a Distributed Computing Environment NCS ONC Examining ONC and NCS Machine-independent Data Representation RPC Mechanism Protocol Compilers: The Most Important Feature Authentication Services Network Resource Naming Services Network Time Service Distributed File System There May be a Common Application Environment in Your Future Netwise: A Second ONC Alternative Machine-independent Data Representation RPC Mechanism Protocol Compiler Authentication Services Network Resource Naming Services Network Time Service Distributed File System Summary of Distributed Computing Environments Rapid Evolution Which One Should You Choose? Put the ONC Suite on Your Machine for Free Chapter 3: Developing High-level RPC Applications Development Overview From Local to Remote Directory Reading Define the Protocol Data Types Program, Procedure, and Version Numbers High-level ONC RPC Library Calls At the Server At the Client Shared XDR Routines Using the XDR Library Writing the Client and Server Programs At the Server At the Client Compile, Link, and Run Why High-level Calls and Not Protocol Compiling? Some Limitations of the High-level Calls TCP Transport Requires Lower-level Calls Chapter 4: Protocol Compiling and Lower-level RPC Programming Development Overview Filename Conventions and Make Using RPCGEN The Protocol Definition Language Definitions Symbolic Constants Enumerations Structures Unions Typedefs Programs Declarations Special Cases Booleans Strings Opaque Data Voids Preprocessor Symbols and Control Lower-level ONC RPC Library Calls At the Client At the Server An Example: One Client Talks to One Server Debugging Step 1: Debug Without the Network Step 2: Use the Raw Transport Step 3: Debug Over the Network Deploying Servers During Development Real RPC Power Means Using IPC Chapter 5: UNIX Networking and Interprocess ommunication A Network Protocol Primer Internet Addressing Connectionless at the Lowest Level Internet Protocols Applications Protocols Connections and Well-known Ports Types of Servers Network Transport Selection: UDP or TCP? Adding a Server to the System inetd and Other Lurking Network Daemons Installing a Server Yourself A Digression on Remote Execution Daemons Configuring inetd An Overview of UNIX Interprocess Communication Pipes and FIFOs Message Queues, Semaphores, and Shared Memory Berkeley Sockets and System V TLI Data Representation or Byte Ordering Retrieving Host, Network, and Address Information Getting ONC RPC Information Berkeley Sockets Yeah, But How Do I Use Sockets? Socket Examples Advanced Socket Programming Issues Remote Execution, Security, and Authentication Chapter 6: Application Development: Networked Parallel Image Processing Developing Parallel Algorithms for a Multi -server Network A Simple Model For Parallel Processing on a Network System Requirements and Network Constraints Server Access Server and Network Performance Brute-force Scheduling Using Process Control Programming Asynchronous and Concurrent Processing at the Client Making Use of Timers to Watch Child Processes Development Steps Remote Image Processing (RIP) Specifying Filter Coefficients rip Development: It's as Easy as 1 2 3 Step 1: Define the Protocol Step 2: Building the Client Procedure Step 3: Developing the Server Procedure Testing and Running the Program Extending RIP Fast SunView Frame Buffer Access Needed Chapter 7: Distributing Existing Applications A Local Image Manager The Header File Modularity Functions Compile, Link, and Run Moving a Local Application to the Network Answer Fourteen Questions First The Strategy Chapter 8: Managing RPC Servers How to Start the Remote Server Shell Scripts For Starting Servers Starting a Remote Server From within Your Client Application Terminating Your Services System Error: "STF-E-OPENIN, Server Too Fat" Hit Reset Report Server Information with rpcinfo Changes Under TIRPC Data Sharing: NFS versus Sending it Yourself Host-qualified Filenames Chapter 9: Multiple Clients and Servers Remote Asynchronous Calls, Multi-server Processing ONC RPC Support The Follow-up RPC Multi-tasking at the Server Multi-tasking with Child Processes Alternatives to Avoid Run-time Process Creation Combining Asynchronous and Multi-tasking at the Server Lightweight Processing Remote Asynchronous Calls with LWP A Minimal Set of LWP Routines Client Multi-server Example Server Multi-tasking Example Caveats Chapter 10: RPC Under Windowing Systems The X Window System X Toolkit Client Application Flow of Control Low-level RPC and X Protocol Similarities Strategies for Using RPC Under X Placing and Servicing RPCs in an Event-driven Environment RPC and XView Synchronous RPCs with a Timer Remote Asynchronous Calls, FRPC Polled with a Timer The Event Notifier and Associated Complications Remote Asynchronous Call Servers Using notify_enable_rpc_svc() RPC and Xol/Xt Watching IPC with XtAppAddInput(3Xt) Remote Asynchronous Calls, Servers Using XtAppAddInput() Comparing Network Windowing Systems and RPC A Digression: Performance of Typical versus Network Windowing Systems Windowing System Evolution Can Hide a Frame Buffer X11 Pixmaps versus SunView Pixrects Augment Typical Windowing Systems with RPCs Chapter 11: ONC Transport-independent RPC Maintains the ONC RPC Protocol Run-time Transport Independence Network Selection Uniform Addressing TIRPC API Backward Compatibility Levels of the Library An Example Availability Chapter 12: Advanced Programming Issues Authentication and How to Use It ONC RPC Credentials and Verification at the Client Adding Authentication to the dim Client Authentication at the Server Adding Access Control to the dim Server Error Reporting Summarized Fault Tolerance, Connection Errors, and Crash Recovery Connection Errors and Recovery Caching Replies at the Server Broken Connections and Testing Crash Recovery The ONC RPC Programming Reference Section One: ONC XDR Library Routines Section Two: ONC Portmap Library Routines Section Three: ONC RPC Library Routines Section 1: ONC XDR Library Routines Overview XDR Streams and Their Management Conversion Filters Synopsis xdr_array() xdr_bool() xdr_bytes() xdr_char() xdr_destroy() xdr_double() xdr_enum() xdr_ float() xdr_ free() xdr_ getpos() xdr_inline() xdr_int() xdr_long() xdrmem_create() xdr_opaque() xdr_ pointer() xdrrec_create() xdrrec_endofrecord() xdrrec_eof() xdrrec_readbytes() xdrrec_skiprecord() xdr_reference() xdr_setpos() xdr_short() xdrstdio_create() xdr_string() xdr_u_char() xdr_u_int() xdr_u_long() xdr_union() xdr_u_short() xdr_vector() xdr_void() xdr_wrapstring() Section 2: ONC Portmap Library Routines Overview Synopsis pmap_ getmaps() pmap_ getport() pmap_rmtcall() pmap_set() pmap_unset() xdr_ pmap() xdr_ pmaplist() Section 3: ONC RPC Library Routines Overview Functional Summary Building Client Authentication Making the Call from the Client CLIENT Handle Management Server Registration With The Portmap SVCXPRT Service Transport Handle Management Server Side Error Handling And Reporting Server I/O and Utility Direct XDR Access Making Secure RPCs Synopsis authdes_create() authdes_ getucred() auth_destroy() authnone_create() uthunix_create() authunix_create_default() callrpc() clnt_broadcast() clnt_call() clnt_control() clnt_create() clnt_create_vers() clnt_destroy() clnt_ freeres() clnt_ geterr() clnt_ pcreateerror() clnt_ perrno() clnt_ perror() clntraw_create() clnt_spcreateerror() clnt_sperrno() clnt_sperror() clnttcp_create() clntudp_bufcreate() clntudp_create() get_myaddress() getnetname() getrpcport() host2netname() key_decryptsession() key_encryptsession() key_ gendes() key_setsecret() netname2host() netname2user() registerrpc() rpc_createerr svc_destroy() svcfd_create() svc_ fds svc_ fdset svc_ freeargs() svc_ getargs() svc_ getcaller() svc_ getreq() svc_ getreqset() svcerr_auth() svcerr_decode() svcerr_noproc() svcerr_noprog() svcerr_ progvers() svcerr_systemerr() svcerr_weakauth() svcraw_create() svc_register() svc_run() svc_sendreply() svctcp_create() svcudp_create() svcudp_bufcreate() svc_unregister() user2netname() xdr_accepted_reply() xdr_authunix_ parms() xdr_callhdr() xdr_callmsg() xdr_opaque_auth() xdr_rejected_reply() xdr_replymsg() xprt_register() xprt_unregister() Error Codes Appendix A: Obtaining RFCs (Internet Standards, Request for Comment) Appendix B: An RPC Case Study: Networked Ray Tracing Introduction to Ray Tracing Accelerating Ray Tracing Multiple Processor Ray Tracing and Data Distribution Networked Ray Tracing Using RPC Dynamic Scheduling and Load Balancing But Why Scan-line Parallelism and Not Frame Parallelism? Performance Results Conclusions References Documentation and Source Code Comments on Augmenting the Client to Run Under X11 with the XView Toolkit Appendix C: Generalized Server Initialization, Inquiry, and Removal Appendix D: Parallel Processing In A Nutshell Parallelism Interprocess Control Interprocess Communication Buzzwords: A Glossary Index