logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

rpc - library routines for remote procedure calls

Attributes

       For an explanation of the terms used in this section, see attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
       │ InterfaceAttributeValue   │
       ├─────────────────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
       │ auth_destroy(), authnone_create(), authunix_create(),                       │ Thread safety │ MT-Safe │
       │ authunix_create_default(), callrpc(), clnt_broadcast(), clnt_call(),        │               │         │
       │ clnt_destroy(), clnt_create(), clnt_control(), clnt_freeres(),              │               │         │
       │ clnt_geterr(), clnt_pcreateerror(), clnt_perrno(), clnt_perror(),           │               │         │
       │ clnt_spcreateerror(), clnt_sperrno(), clnt_sperror(), clntraw_create(),     │               │         │
       │ clnttcp_create(), clntudp_create(), clntudp_bufcreate(), get_myaddress(),   │               │         │
       │ pmap_getmaps(), pmap_getport(), pmap_rmtcall(), pmap_set(), pmap_unset(),   │               │         │
       │ registerrpc(), svc_destroy(), svc_freeargs(), svc_getargs(),                │               │         │
       │ svc_getcaller(), svc_getreqset(), svc_getreq(), svc_register(), svc_run(),  │               │         │
       │ svc_sendreply(), svc_unregister(), svcerr_auth(), svcerr_decode(),          │               │         │
       │ svcerr_noproc(), svcerr_noprog(), svcerr_progvers(), svcerr_systemerr(),    │               │         │
       │ svcerr_weakauth(), svcfd_create(), svcraw_create(), svctcp_create(),        │               │         │
       │ svcudp_bufcreate(), svcudp_create(), xdr_accepted_reply(),                  │               │         │
       │ xdr_authunix_parms(), xdr_callhdr(), xdr_callmsg(), xdr_opaque_auth(),      │               │         │
       │ xdr_pmap(), xdr_pmaplist(), xdr_rejected_reply(), xdr_replymsg(),           │               │         │
       │ xprt_register(), xprt_unregister()                                          │               │         │
       └─────────────────────────────────────────────────────────────────────────────┴───────────────┴─────────┘

Library

       Standard C library (libc, -lc)

Name

       rpc - library routines for remote procedure calls

See Also

xdr(3)

       The following manuals:
              Remote Procedure Calls: Protocol Specification
              Remote Procedure Call Programming Guide
              rpcgen Programming Guide

       RPC:RemoteProcedureCallProtocolSpecification, RFC 1050, Sun Microsystems, Inc., USC-ISI.

Linux man-pages 6.9.1                              2024-05-02                                             rpc(3)

Synopsis And Description

       These routines allow C programs to make procedure calls on other machines across the network.  First, the
       client  calls  a  procedure  to send a data packet to the server.  Upon receipt of the packet, the server
       calls a dispatch routine to perform the requested service, and then sends back  a  reply.   Finally,  the
       procedure call returns to the client.

       To take use of these routines, include the header file <rpc/rpc.h>.

       The prototypes below make use of the following types:

           typedefintbool_t;typedefbool_t(*xdrproc_t)(XDR*,void*,...);typedefbool_t(*resultproc_t)(caddr_tresp,structsockaddr_in*raddr);

       See the header files for the declarations of the AUTH, CLIENT, SVCXPRT, and XDR types.

       voidauth_destroy(AUTH*auth);

              A  macro  that  destroys the authentication information associated with auth.  Destruction usually
              involves deallocation of private data structures.  The use of  auth  is  undefined  after  calling
              auth_destroy().

       AUTH*authnone_create(void);

              Create  and  return  an RPC authentication handle that passes nonusable authentication information
              with each remote procedure call.  This is the default authentication used by RPC.

       AUTH*authunix_create(char*host,uid_tuid,gid_tgid,intlen,gid_taup_gids[.len]);

              Create and return an RPC authentication handle  that  contains  authentication  information.   The
              parameter  host is the name of the machine on which the information was created; uid is the user's
              user ID; gid is the user's current group ID; len and aup_gids refer to a counted array  of  groups
              to which the user belongs.  It is easy to impersonate a user.

       AUTH*authunix_create_default(void);

              Calls authunix_create() with the appropriate parameters.

       intcallrpc(char*host,unsignedlongprognum,unsignedlongversnum,unsignedlongprocnum,xdrproc_tinproc,constchar*in,xdrproc_toutproc,char*out);

              Call the remote procedure associated with prognum, versnum, and procnum on the machine, host.  The
              parameter  in  is  the  address of the procedure's argument(s), and out is the address of where to
              place the result(s); inproc is used to encode the procedure's parameters, and outproc is  used  to
              decode  the  procedure's  results.  This routine returns zero if it succeeds, or the value of enumclnt_stat cast to an integer if it fails.  The routine  clnt_perrno()  is  handy  for  translating
              failure statuses into messages.

              Warning:   calling   remote  procedures  with  this  routine  uses  UDP/IP  as  a  transport;  see
              clntudp_create() for restrictions.  You do not have control of timeouts  or  authentication  using
              this routine.

       enumclnt_statclnt_broadcast(unsignedlongprognum,unsignedlongversnum,unsignedlongprocnum,xdrproc_tinproc,char*in,xdrproc_toutproc,char*out,resultproc_teachresult);

              Like  callrpc(),  except  the  call  message is broadcast to all locally connected broadcast nets.
              Each time it receives a response, this routine calls eachresult(), whose form is:

                  eachresult(char*out,structsockaddr_in*addr);

              where out is the same as out passed to clnt_broadcast(), except that the remote procedure's output
              is decoded there; addr  points  to  the  address  of  the  machine  that  sent  the  results.   If
              eachresult()  returns  zero,  clnt_broadcast()  waits  for more replies; otherwise it returns with
              appropriate status.

              Warning: broadcast sockets are limited in size to the maximum transfer unit of the data link.  For
              ethernet, this value is 1500 bytes.

       enumclnt_statclnt_call(CLIENT*clnt,unsignedlongprocnum,xdrproc_tinproc,char*in,xdrproc_toutproc,char*out,structtimevaltout);

              A macro that calls the remote procedure procnum associated with the client handle, clnt, which  is
              obtained  with  an  RPC  client  creation  routine such as clnt_create().  The parameter in is the
              address of the procedure's argument(s), and out is the address of where to  place  the  result(s);
              inproc is used to encode the procedure's parameters, and outproc is used to decode the procedure's
              results; tout is the time allowed for results to come back.

       clnt_destroy(CLIENT*clnt);

              A  macro  that  destroys  the  client's  RPC handle.  Destruction usually involves deallocation of
              private data  structures,  including  clnt  itself.   Use  of  clnt  is  undefined  after  calling
              clnt_destroy().   If  the  RPC  library  opened  the  associated  socket,  it  will close it also.
              Otherwise, the socket remains open.

       CLIENT*clnt_create(constchar*host,unsignedlongprog,unsignedlongvers,constchar*proto);

              Generic client creation routine.  host identifies the name of the remote host where the server  is
              located.  proto indicates which kind of transport protocol to use.  The currently supported values
              for  this  field  are  “udp”  and  “tcp”.   Default  timeouts  are  set, but can be modified using
              clnt_control().

              Warning: using UDP has its shortcomings.  Since UDP-based RPC messages  can  hold  only  up  to  8
              Kbytes  of encoded data, this transport cannot be used for procedures that take large arguments or
              return huge results.

       bool_tclnt_control(CLIENT*cl,intreq,char*info);

              A macro used to change or retrieve various information about a client object.  req  indicates  the
              type  of operation, and info is a pointer to the information.  For both UDP and TCP, the supported
              values of req and their argument types and what they do are:

                  CLSET_TIMEOUTstructtimeval // set total timeout
                  CLGET_TIMEOUTstructtimeval // get total timeout

              Note: if you set the timeout using clnt_control(), the timeout  parameter  passed  to  clnt_call()
              will be ignored in all future calls.

                  CLGET_SERVER_ADDRstructsockaddr_in
                                  // get server's address

              The following operations are valid for UDP only:

                  CLSET_RETRY_TIMEOUTstructtimeval // set the retry timeout
                  CLGET_RETRY_TIMEOUTstructtimeval // get the retry timeout

              The  retry  timeout is the time that "UDP RPC" waits for the server to reply before retransmitting
              the request.

       clnt_freeres(CLIENT*clnt,xdrproc_toutproc,char*out);

              A macro that frees any data allocated by the RPC/XDR system when it decoded the results of an  RPC
              call.   The parameter out is the address of the results, and outproc is the XDR routine describing
              the results.  This routine returns one if the results were successfully freed, and zero otherwise.

       voidclnt_geterr(CLIENT*clnt,structrpc_err*errp);

              A macro that copies the error structure out of the client handle to the structure at address errp.

       voidclnt_pcreateerror(constchar*s);

              Print a message to standard error indicating why a client RPC handle could not  be  created.   The
              message  is  prepended  with  string  s and a colon.  Used when a clnt_create(), clntraw_create(),
              clnttcp_create(), or clntudp_create() call fails.

       voidclnt_perrno(enumclnt_statstat);

              Print a message to standard error corresponding to the condition indicated by  stat.   Used  after
              callrpc().

       clnt_perror(CLIENT*clnt,constchar*s);

              Print a message to standard error indicating why an RPC call failed; clnt is the handle used to do
              the call.  The message is prepended with string s and a colon.  Used after clnt_call().

       char*clnt_spcreateerror(constchar*s);

              Like  clnt_pcreateerror(),  except  that  it  returns a string instead of printing to the standard
              error.

              Bugs: returns pointer to static data that is overwritten on each call.

       char*clnt_sperrno(enumclnt_statstat);

              Take the same arguments as clnt_perrno(), but instead of sending a message to the  standard  error
              indicating  why  an RPC call failed, return a pointer to a string which contains the message.  The
              string ends with a NEWLINE.

              clnt_sperrno() is used instead of clnt_perrno() if the program does not have a standard error  (as
              a  program  running  as  a  server  quite likely does not), or if the programmer does not want the
              message to be output with printf(3), or if a message  format  different  than  that  supported  by
              clnt_perrno() is to be used.  Note: unlike clnt_sperror() and clnt_spcreateerror(), clnt_sperrno()
              returns pointer to static data, but the result will not get overwritten on each call.

       char*clnt_sperror(CLIENT*rpch,constchar*s);

              Like  clnt_perror(),  except that (like clnt_sperrno()) it returns a string instead of printing to
              standard error.

              Bugs: returns pointer to static data that is overwritten on each call.

       CLIENT*clntraw_create(unsignedlongprognum,unsignedlongversnum);

              This routine creates a toy RPC client for  the  remote  program  prognum,  version  versnum.   The
              transport  used  to pass messages to the service is actually a buffer within the process's address
              space, so the corresponding RPC server should live in the same address space; see svcraw_create().
              This allows simulation of RPC and acquisition of RPC overheads, such as round trip times,  without
              any kernel interference.  This routine returns NULL if it fails.

       CLIENT*clnttcp_create(structsockaddr_in*addr,unsignedlongprognum,unsignedlongversnum,int*sockp,unsignedintsendsz,unsignedintrecvsz);

              This  routine  creates  an  RPC client for the remote program prognum, version versnum; the client
              uses TCP/IP as a transport.  The  remote  program  is  located  at  Internet  address  *addr.   If
              addr->sin_port  is zero, then it is set to the actual port that the remote program is listening on
              (the remote portmap service is consulted for this information).  The parameter sockp is a  socket;
              if  it is RPC_ANYSOCK, then this routine opens a new one and sets sockp.  Since TCP-based RPC uses
              buffered I/O, the user may specify the size of the send and receive buffers  with  the  parameters
              sendsz  and  recvsz;  values  of  zero  choose suitable defaults.  This routine returns NULL if it
              fails.

       CLIENT*clntudp_create(structsockaddr_in*addr,unsignedlongprognum,unsignedlongversnum,structtimevalwait,int*sockp);

              This routine creates an RPC client for the remote program prognum,  version  versnum;  the  client
              uses  use  UDP/IP  as  a  transport.   The remote program is located at Internet address addr.  If
              addr->sin_port is zero, then it is set to actual port that the remote program is listening on (the
              remote portmap service is consulted for this information).  The parameter sockp is a socket; if it
              is RPC_ANYSOCK, then this routine opens a new one and sets sockp.  The UDP transport  resends  the
              call  message  in intervals of wait time until a response is received or until the call times out.
              The total time for the call to time out is specified by clnt_call().

              Warning: since UDP-based RPC messages can hold only up to 8 Kbytes of encoded data, this transport
              cannot be used for procedures that take large arguments or return huge results.

       CLIENT*clntudp_bufcreate(structsockaddr_in*addr,unsignedlongprognum,unsignedlongversnum,structtimevalwait,int*sockp,unsignedintsendsize,unsignedintrecosize);

              This routine creates an RPC client for the remote program prognum, on versnum; the client uses use
              UDP/IP as a transport.  The remote program is located at Internet address addr.  If addr->sin_port
              is zero, then it is set to actual port that the remote program is listening on (the remote portmap
              service is consulted  for  this  information).   The  parameter  sockp  is  a  socket;  if  it  is
              RPC_ANYSOCK, then this routine opens a new one and sets sockp.  The UDP transport resends the call
              message  in  intervals of wait time until a response is received or until the call times out.  The
              total time for the call to time out is specified by clnt_call().

              This allows the user to specify the maximum packet size for sending and  receiving  UDP-based  RPC
              messages.

       voidget_myaddress(structsockaddr_in*addr);

              Stuff  the machine's IP address into *addr, without consulting the library routines that deal with
              /etc/hosts.  The port number is always set to htons(PMAPPORT).

       structpmaplist*pmap_getmaps(structsockaddr_in*addr);

              A user interface to the portmap service, which returns a list of the current  RPC  program-to-port
              mappings  on  the  host  located  at IP address *addr.  This routine can return NULL.  The command
              rpcinfo-p uses this routine.

       unsignedshortpmap_getport(structsockaddr_in*addr,unsignedlongprognum,unsignedlongversnum,unsignedintprotocol);

              A user interface to the portmap service, which returns the port number on which  waits  a  service
              that  supports  program  number  prognum,  version  versnum,  and  speaks  the  transport protocol
              associated with protocol.  The value of protocol is most likely  IPPROTO_UDP  or  IPPROTO_TCP.   A
              return  value  of  zero  means  that  the  mapping does not exist or that the RPC system failed to
              contact the remote portmap service.   In  the  latter  case,  the  global  variable  rpc_createerr
              contains the RPC status.

       enumclnt_statpmap_rmtcall(structsockaddr_in*addr,unsignedlongprognum,unsignedlongversnum,unsignedlongprocnum,xdrproc_tinproc,char*in,xdrproc_toutproc,char*out,structtimevaltout,unsignedlong*portp);

              A  user  interface to the portmap service, which instructs portmap on the host at IP address *addr
              to make an RPC call on your behalf to a procedure on that host.   The  parameter  *portp  will  be
              modified  to  the  program's  port  number  if  the  procedure succeeds.  The definitions of other
              parameters are discussed in callrpc() and clnt_call().  This procedure should be used for a “ping”
              and nothing else.  See also clnt_broadcast().

       bool_tpmap_set(unsignedlongprognum,unsignedlongversnum,intprotocol,unsignedshortport);

              A user interface  to  the  portmap  service,  which  establishes  a  mapping  between  the  triple
              [prognum,versnum,protocol]  and  port  on the machine's portmap service.  The value of protocol is
              most likely IPPROTO_UDP or IPPROTO_TCP.  This routine returns one if it succeeds, zero  otherwise.
              Automatically done by svc_register().

       bool_tpmap_unset(unsignedlongprognum,unsignedlongversnum);

              A  user  interface  to  the  portmap  service,  which  destroys  all  mapping  between  the triple
              [prognum,versnum,*] and ports on the machine's portmap service.  This routine returns  one  if  it
              succeeds, zero otherwise.

       intregisterrpc(unsignedlongprognum,unsignedlongversnum,unsignedlongprocnum,char*(*procname)(char*),xdrproc_tinproc,xdrproc_toutproc);

              Register  procedure  procname  with  the  RPC  service  package.  If a request arrives for program
              prognum, version versnum, and procedure  procnum,  procname  is  called  with  a  pointer  to  its
              parameter(s);  procname  should return a pointer to its static result(s); inproc is used to decode
              the parameters while outproc is used to encode the results.  This  routine  returns  zero  if  the
              registration succeeded, -1 otherwise.

              Warning:  remote  procedures  registered in this form are accessed using the UDP/IP transport; see
              svcudp_create() for restrictions.

       structrpc_createerrrpc_createerr;

              A global variable whose value is set by any RPC client creation routine  that  does  not  succeed.
              Use the routine clnt_pcreateerror() to print the reason why.

       voidsvc_destroy(SVCXPRT*xprt);

              A  macro  that  destroys  the  RPC  service  transport handle, xprt.  Destruction usually involves
              deallocation of private data structures, including xprt itself.  Use of xprt  is  undefined  after
              calling this routine.

       fd_setsvc_fdset;

              A  global variable reflecting the RPC service side's read file descriptor bit mask; it is suitable
              as a parameter to the select(2) system call.  This is of interest only if  a  service  implementor
              does  their  own  asynchronous  event  processing, instead of calling svc_run().  This variable is
              read-only  (do  not  pass  its  address  to  select(2)!),  yet  it  may  change  after  calls   to
              svc_getreqset() or any creation routines.

       intsvc_fds;

              Similar  to  svc_fdset,  but  limited  to  32  file  descriptors.   This interface is obsoleted by
              svc_fdset.

       svc_freeargs(SVCXPRT*xprt,xdrproc_tinproc,char*in);

              A macro that frees any data allocated by the RPC/XDR system when it decoded  the  arguments  to  a
              service  procedure  using  svc_getargs().  This routine returns 1 if the results were successfully
              freed, and zero otherwise.

       svc_getargs(SVCXPRT*xprt,xdrproc_tinproc,char*in);

              A macro that decodes the arguments of an RPC request associated with  the  RPC  service  transport
              handle,  xprt.   The parameter in is the address where the arguments will be placed; inproc is the
              XDR routine used to decode the arguments.  This routine returns one if decoding succeeds, and zero
              otherwise.

       structsockaddr_in*svc_getcaller(SVCXPRT*xprt);

              The approved way of getting the network address of the caller of a procedure associated  with  the
              RPC service transport handle, xprt.

       voidsvc_getreqset(fd_set*rdfds);

              This  routine  is  of  interest only if a service implementor does not call svc_run(), but instead
              implements custom asynchronous event processing.  It is called when the select(2) system call  has
              determined that an RPC request has arrived on some RPC socket(s); rdfds is the resultant read file
              descriptor bit mask.  The routine returns when all sockets associated with the value of rdfds have
              been serviced.

       voidsvc_getreq(intrdfds);

              Similar  to  svc_getreqset(),  but limited to 32 file descriptors.  This interface is obsoleted by
              svc_getreqset().

       bool_tsvc_register(SVCXPRT*xprt,unsignedlongprognum,unsignedlongversnum,void(*dispatch)(structsvc_req*,SVCXPRT*),unsignedlongprotocol);

              Associates prognum and versnum with the service dispatch  procedure,  dispatch.   If  protocol  is
              zero,  the  service  is  not  registered with the portmap service.  If protocol is nonzero, then a
              mapping of the triple [prognum,versnum,protocol] to xprt->xp_port is established  with  the  local
              portmap  service (generally protocol is zero, IPPROTO_UDP or IPPROTO_TCP).  The procedure dispatch
              has the following form:

                  dispatch(struct svc_req *request, SVCXPRT *xprt);

              The svc_register() routine returns one if it succeeds, and zero otherwise.

       voidsvc_run(void);

              This routine never returns.  It waits for RPC  requests  to  arrive,  and  calls  the  appropriate
              service  procedure  using  svc_getreq() when one arrives.  This procedure is usually waiting for a
              select(2) system call to return.

       bool_tsvc_sendreply(SVCXPRT*xprt,xdrproc_toutproc,char*out);

              Called by an RPC service's dispatch routine to send the results of a remote procedure  call.   The
              parameter  xprt  is the request's associated transport handle; outproc is the XDR routine which is
              used to encode the results; and out is the address of the results.  This routine returns one if it
              succeeds, zero otherwise.

       voidsvc_unregister(unsignedlongprognum,unsignedlongversnum);

              Remove all mapping of the double  [prognum,versnum]  to  dispatch  routines,  and  of  the  triple
              [prognum,versnum,*] to port number.

       voidsvcerr_auth(SVCXPRT*xprt,enumauth_statwhy);

              Called  by  a  service  dispatch routine that refuses to perform a remote procedure call due to an
              authentication error.

       voidsvcerr_decode(SVCXPRT*xprt);

              Called by a service dispatch routine that cannot successfully decode  its  parameters.   See  also
              svc_getargs().

       voidsvcerr_noproc(SVCXPRT*xprt);

              Called  by a service dispatch routine that does not implement the procedure number that the caller
              requests.

       voidsvcerr_noprog(SVCXPRT*xprt);

              Called when the desired program is not registered with  the  RPC  package.   Service  implementors
              usually do not need this routine.

       voidsvcerr_progvers(SVCXPRT*xprt,unsignedlonglow_vers,unsignedlonghigh_vers);

              Called  when  the  desired  version  of a program is not registered with the RPC package.  Service
              implementors usually do not need this routine.

       voidsvcerr_systemerr(SVCXPRT*xprt);

              Called by a service dispatch routine when it detects a system error not covered by any  particular
              protocol.  For example, if a service can no longer allocate storage, it may call this routine.

       voidsvcerr_weakauth(SVCXPRT*xprt);

              Called  by  a  service  dispatch  routine  that  refuses to perform a remote procedure call due to
              insufficient authentication parameters.  The routine calls svcerr_auth(xprt,AUTH_TOOWEAK).

       SVCXPRT*svcfd_create(intfd,unsignedintsendsize,unsignedintrecvsize);

              Create a service on top of any open  file  descriptor.   Typically,  this  file  descriptor  is  a
              connected  socket for a stream protocol such as TCP.  sendsize and recvsize indicate sizes for the
              send and receive buffers.  If they are zero, a reasonable default is chosen.

       SVCXPRT*svcraw_create(void);

              This routine creates a toy RPC service transport, to which it returns a pointer.  The transport is
              really a buffer within the process's address space, so the corresponding RPC client should live in
              the same address  space;  see  clntraw_create().   This  routine  allows  simulation  of  RPC  and
              acquisition  of  RPC  overheads (such as round trip times), without any kernel interference.  This
              routine returns NULL if it fails.

       SVCXPRT*svctcp_create(intsock,unsignedintsend_buf_size,unsignedintrecv_buf_size);

              This routine creates a TCP/IP-based RPC service transport, to which it  returns  a  pointer.   The
              transport is associated with the socket sock, which may be RPC_ANYSOCK, in which case a new socket
              is  created.   If  the  socket  is not bound to a local TCP port, then this routine binds it to an
              arbitrary port.   Upon  completion,  xprt->xp_sock  is  the  transport's  socket  descriptor,  and
              xprt->xp_port  is the transport's port number.  This routine returns NULL if it fails.  Since TCP-
              based RPC uses buffered I/O, users may specify the size of buffers; values of zero choose suitable
              defaults.

       SVCXPRT*svcudp_bufcreate(intsock,unsignedintsendsize,unsignedintrecosize);

              This routine creates a UDP/IP-based RPC service transport, to which it  returns  a  pointer.   The
              transport is associated with the socket sock, which may be RPC_ANYSOCK, in which case a new socket
              is  created.   If  the  socket  is not bound to a local UDP port, then this routine binds it to an
              arbitrary port.   Upon  completion,  xprt->xp_sock  is  the  transport's  socket  descriptor,  and
              xprt->xp_port is the transport's port number.  This routine returns NULL if it fails.

              This  allows  the  user to specify the maximum packet size for sending and receiving UDP-based RPC
              messages.

       SVCXPRT*svcudp_create(intsock);

              This call is equivalent to svcudp_bufcreate(sock,SZ,SZ) for some default size SZ.

       bool_txdr_accepted_reply(XDR*xdrs,structaccepted_reply*ar);

              Used for encoding RPC reply messages.  This routine is useful for users who wish to generate  RPC-
              style messages without using the RPC package.

       bool_txdr_authunix_parms(XDR*xdrs,structauthunix_parms*aupp);

              Used for describing UNIX credentials.  This routine is useful for users who wish to generate these
              credentials without using the RPC authentication package.

       voidxdr_callhdr(XDR*xdrs,structrpc_msg*chdr);

              Used  for  describing  RPC  call  header  messages.   This routine is useful for users who wish to
              generate RPC-style messages without using the RPC package.

       bool_txdr_callmsg(XDR*xdrs,structrpc_msg*cmsg);

              Used for describing RPC call messages.  This routine is useful for users who wish to generate RPC-
              style messages without using the RPC package.

       bool_txdr_opaque_auth(XDR*xdrs,structopaque_auth*ap);

              Used for describing RPC authentication information messages.  This routine is useful for users who
              wish to generate RPC-style messages without using the RPC package.

       bool_txdr_pmap(XDR*xdrs,structpmap*regs);

              Used for describing parameters to various portmap procedures, externally.  This routine is  useful
              for users who wish to generate these parameters without using the pmap interface.

       bool_txdr_pmaplist(XDR*xdrs,structpmaplist**rp);

              Used  for  describing  a  list of port mappings, externally.  This routine is useful for users who
              wish to generate these parameters without using the pmap interface.

       bool_txdr_rejected_reply(XDR*xdrs,structrejected_reply*rr);

              Used for describing RPC reply messages.  This routine is useful for users  who  wish  to  generate
              RPC-style messages without using the RPC package.

       bool_txdr_replymsg(XDR*xdrs,structrpc_msg*rmsg);

              Used for describing RPC reply messages.  This routine is useful for users who wish to generate RPC
              style messages without using the RPC package.

       voidxprt_register(SVCXPRT*xprt);

              After  RPC  service  transport  handles  are created, they should register themselves with the RPC
              service package.  This routine modifies the global variable svc_fds.  Service implementors usually
              do not need this routine.

       voidxprt_unregister(SVCXPRT*xprt);

              Before an RPC service transport handle is destroyed, it should  unregister  itself  with  the  RPC
              service package.  This routine modifies the global variable svc_fds.  Service implementors usually
              do not need this routine.