1RPC(3) Library Functions Manual RPC(3)
2
3
4
6 rpc - library routines for remote procedure calls
7
9 These routines allow C programs to make procedure calls on other
10 machines across the network. First, the client calls a procedure to
11 send a data packet to the server. Upon receipt of the packet, the
12 server calls a dispatch routine to perform the requested service, and
13 then sends back a reply. Finally, the procedure call returns to the
14 client.
15
16 #include <rpc/rpc.h>
17
18 void
19 auth_destroy(auth)
20 AUTH *auth;
21
22 A macro that destroys the authentication information associated
23 with auth. Destruction usually involves deallocation of private
24 data structures. The use of auth is undefined after calling
25 auth_destroy().
26
27 AUTH *
28 authnone_create()
29
30 Create and returns an RPC authentication handle that passes
31 nonusable authentication information with each remote procedure
32 call. This is the default authentication used by RPC.
33
34 AUTH *
35 authunix_create(host, uid, gid, len, aup_gids)
36 char *host;
37 int uid, gid, len, *aup.gids;
38
39 Create and return an RPC authentication handle that contains
40 authentication information. The parameter host is the name of
41 the machine on which the information was created; uid is the
42 user's user ID ; gid is the user's current group ID ; len and
43 aup_gids refer to a counted array of groups to which the user
44 belongs. It is easy to impersonate a user.
45
46 AUTH *
47 authunix_create_default()
48
49 Calls authunix_create() with the appropriate parameters.
50
51 callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
52 char *host;
53 u_long prognum, versnum, procnum;
54 char *in, *out;
55 xdrproc_t inproc, outproc;
56
57 Call the remote procedure associated with prognum, versnum, and
58 procnum on the machine, host. The parameter in is the address
59 of the procedure's argument(s), and out is the address of where
60 to place the result(s); inproc is used to encode the procedure's
61 parameters, and outproc is used to decode the procedure's
62 results. This routine returns zero if it succeeds, or the value
63 of enum clnt_stat cast to an integer if it fails. The routine
64 clnt_perrno() is handy for translating failure statuses into
65 messages.
66
67 Warning: calling remote procedures with this routine uses UDP/IP
68 as a transport; see clntudp_create() for restrictions. You do
69 not have control of timeouts or authentication using this rou‐
70 tine.
71
72 enum clnt_stat
73 clnt_broadcast(prognum, versnum, procnum, inproc, in, outproc, out, eachresult)
74 u_long prognum, versnum, procnum;
75 char *in, *out;
76 xdrproc_t inproc, outproc;
77 resultproc_t eachresult;
78
79 Like callrpc(), except the call message is broadcast to all
80 locally connected broadcast nets. Each time it receives a
81 response, this routine calls eachresult(), whose form is:
82
83 eachresult(out, addr)
84 char *out;
85 struct sockaddr_in *addr;
86
87 where out is the same as out passed to clnt_broadcast(), except
88 that the remote procedure's output is decoded there; addr points
89 to the address of the machine that sent the results. If eachre‐
90 sult() returns zero, clnt_broadcast() waits for more replies;
91 otherwise it returns with appropriate status.
92
93 Warning: broadcast sockets are limited in size to the maximum
94 transfer unit of the data link. For ethernet, this value is 1500
95 bytes.
96
97 enum clnt_stat
98 clnt_call(clnt, procnum, inproc, in, outproc, out, tout)
99 CLIENT *clnt;
100 u_long
101 procnum;
102 xdrproc_t inproc, outproc;
103 char *in, *out;
104 struct timeval tout;
105
106 A macro that calls the remote procedure procnum associated with
107 the client handle, clnt, which is obtained with an RPC client
108 creation routine such as clnt_create(). The parameter in is the
109 address of the procedure's argument(s), and out is the address
110 of where to place the result(s); inproc is used to encode the
111 procedure's parameters, and outproc is used to decode the proce‐
112 dure's results; tout is the time allowed for results to come
113 back.
114
115 clnt_destroy(clnt)
116 CLIENT *clnt;
117
118 A macro that destroys the client's RPC handle. Destruction usu‐
119 ally involves deallocation of private data structures, including
120 clnt itself. Use of clnt is undefined after calling
121 clnt_destroy(). If the RPC library opened the associated
122 socket, it will close it also. Otherwise, the socket remains
123 open.
124
125 CLIENT *
126 clnt_create(host, prog, vers, proto)
127 char *host;
128 u_long prog, vers;
129 char *proto;
130
131 Generic client creation routine. host identifies the name of
132 the remote host where the server is located. proto indicates
133 which kind of transport protocol to use. The currently supported
134 values for this field are “udp” and “tcp”. Default timeouts are
135 set, but can be modified using clnt_control().
136
137 Warning: Using UDP has its shortcomings. Since UDP-based RPC
138 messages can only hold up to 8 Kbytes of encoded data, this
139 transport cannot be used for procedures that take large argu‐
140 ments or return huge results.
141
142 bool_t
143 clnt_control(cl, req, info)
144 CLIENT *cl;
145 char *info;
146
147 A macro used to change or retrieve various information about a
148 client object. req indicates the type of operation, and info is
149 a pointer to the information. For both UDP and TCP, the sup‐
150 ported values of req and their argument types and what they do
151 are:
152
153 CLSET_TIMEOUT struct timeval set total timeout
154 CLGET_TIMEOUT struct timeval get total timeout
155
156 Note: if you set the timeout using clnt_control(), the timeout
157 parameter passed to clnt_call() will be ignored in all future
158 calls.
159
160 CLGET_SERVER_ADDR struct sockaddr_in get server's address
161
162 The following operations are valid for UDP only:
163
164 CLSET_RETRY_TIMEOUT struct timeval set the retry timeout
165 CLGET_RETRY_TIMEOUT struct timeval get the retry timeout
166
167 The retry timeout is the time that UDP RPC waits for the server
168 to reply before retransmitting the request.
169
170 clnt_freeres(clnt, outproc, out)
171 CLIENT *clnt;
172 xdrproc_t outproc;
173 char *out;
174
175 A macro that frees any data allocated by the RPC/XDR system when
176 it decoded the results of an RPC call. The parameter out is the
177 address of the results, and outproc is the XDR routine describ‐
178 ing the results. This routine returns one if the results were
179 successfully freed, and zero otherwise.
180
181 void
182 clnt_geterr(clnt, errp)
183 CLIENT *clnt;
184 struct rpc_err *errp;
185
186 A macro that copies the error structure out of the client handle
187 to the structure at address errp.
188
189 void
190 clnt_pcreateerror(s)
191 char *s;
192
193 Print a message to standard error indicating why a client RPC
194 handle could not be created. The message is prepended with
195 string s and a colon. Used when a clnt_create(), clntraw_cre‐
196 ate(), clnttcp_create(), or clntudp_create() call fails.
197
198 void
199 clnt_perrno(stat)
200 enum clnt_stat stat;
201
202 Print a message to standard error corresponding to the condition
203 indicated by stat. Used after callrpc().
204
205 clnt_perror(clnt, s)
206 CLIENT *clnt;
207 char *s;
208
209 Print a message to standard error indicating why an RPC call
210 failed; clnt is the handle used to do the call. The message is
211 prepended with string s and a colon. Used after clnt_call().
212
213 char *
214 clnt_spcreateerror
215 char *s;
216
217 Like clnt_pcreateerror(), except that it returns a string
218 instead of printing to the standard error.
219
220 Bugs: returns pointer to static data that is overwritten on each
221 call.
222
223 char *
224 clnt_sperrno(stat)
225 enum clnt_stat stat;
226
227 Take the same arguments as clnt_perrno(), but instead of sending
228 a message to the standard error indicating why an RPC call
229 failed, return a pointer to a string which contains the message.
230 The string ends with a NEWLINE.
231
232 clnt_sperrno() is used instead of clnt_perrno() if the program
233 does not have a standard error (as a program running as a server
234 quite likely does not), or if the programmer does not want the
235 message to be output with printf(), or if a message format dif‐
236 ferent than that supported by clnt_perrno() is to be used.
237 Note: unlike clnt_sperror() and clnt_spcreaterror(), clnt_sper‐
238 rno() returns pointer to static data, but the result will not
239 get overwritten on each call.
240
241 char *
242 clnt_sperror(rpch, s)
243 CLIENT *rpch;
244 char *s;
245
246 Like clnt_perror(), except that (like clnt_sperrno()) it returns
247 a string instead of printing to standard error.
248
249 Bugs: returns pointer to static data that is overwritten on each
250 call.
251
252 CLIENT *
253 clntraw_create(prognum, versnum)
254 u_long prognum, versnum;
255
256 This routine creates a toy RPC client for the remote program
257 prognum, version versnum. The transport used to pass messages
258 to the service is actually a buffer within the process's address
259 space, so the corresponding RPC server should live in the same
260 address space; see svcraw_create(). This allows simulation of
261 RPC and acquisition of RPC overheads, such as round trip times,
262 without any kernel interference. This routine returns NULL if it
263 fails.
264
265 CLIENT *
266 clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz)
267 struct sockaddr_in *addr;
268 u_long prognum, versnum;
269 int *sockp;
270 u_int sendsz, recvsz;
271
272 This routine creates an RPC client for the remote program
273 prognum, version versnum; the client uses TCP/IP as a transport.
274 The remote program is located at Internet address *addr. If
275 addr->sin_port is zero, then it is set to the actual port that
276 the remote program is listening on (the remote portmap service
277 is consulted for this information). The parameter sockp is a
278 socket; if it is RPC_ANYSOCK, then this routine opens a new one
279 and sets sockp. Since TCP-based RPC uses buffered I/O , the
280 user may specify the size of the send and receive buffers with
281 the parameters sendsz and recvsz; values of zero choose suitable
282 defaults. This routine returns NULL if it fails.
283
284 CLIENT *
285 clntudp_create(addr, prognum, versnum, wait, sockp)
286 struct sockaddr_in *addr;
287 u_long prognum, versnum;
288 struct timeval wait;
289 int *sockp;
290
291 This routine creates an RPC client for the remote program
292 prognum, version versnum; the client uses use UDP/IP as a trans‐
293 port. The remote program is located at Internet address addr.
294 If addr->sin_port is zero, then it is set to actual port that
295 the remote program is listening on (the remote portmap service
296 is consulted for this information). The parameter sockp is a
297 socket; if it is RPC_ANYSOCK, then this routine opens a new one
298 and sets sockp. The UDP transport resends the call message in
299 intervals of wait time until a response is received or until the
300 call times out. The total time for the call to time out is
301 specified by clnt_call().
302
303 Warning: since UDP-based RPC messages can only hold up to 8
304 Kbytes of encoded data, this transport cannot be used for proce‐
305 dures that take large arguments or return huge results.
306
307 CLIENT *
308 clntudp_bufcreate(addr, prognum, versnum, wait, sockp, sendsize, recosize)
309 struct sockaddr_in *addr;
310 u_long prognum, versnum;
311 struct timeval wait;
312 int *sockp;
313 unsigned int sendsize;
314 unsigned int recosize;
315
316 This routine creates an RPC client for the remote program
317 prognum, on versnum; the client uses use UDP/IP as a transport.
318 The remote program is located at Internet address addr. If
319 addr->sin_port is zero, then it is set to actual port that the
320 remote program is listening on (the remote portmap service is
321 consulted for this information). The parameter sockp is a
322 socket; if it is RPC_ANYSOCK, then this routine opens a new one
323 and sets sockp. The UDP transport resends the call message in
324 intervals of wait time until a response is received or until the
325 call times out. The total time for the call to time out is
326 specified by clnt_call().
327
328 This allows the user to specify the maximum packet size for
329 sending and receiving UDP-based RPC messages.
330
331 void
332 get_myaddress(addr)
333 struct sockaddr_in *addr;
334
335 Stuff the machine's IP address into *addr, without consulting
336 the library routines that deal with /etc/hosts. The port number
337 is always set to htons(PMAPPORT).
338
339 struct pmaplist *
340 pmap_getmaps(addr)
341 struct sockaddr_in *addr;
342
343 A user interface to the portmap service, which returns a list of
344 the current RPC program-to-port mappings on the host located at
345 IP address *addr. This routine can return NULL . The command
346 `rpcinfo -p' uses this routine.
347
348 u_short
349 pmap_getport(addr, prognum, versnum, protocol)
350 struct sockaddr_in *addr;
351 u_long prognum, versnum, protocol;
352
353 A user interface to the portmap service, which returns the port
354 number on which waits a service that supports program number
355 prognum, version versnum, and speaks the transport protocol
356 associated with protocol. The value of protocol is most likely
357 IPPROTO_UDP or IPPROTO_TCP. A return value of zero means that
358 the mapping does not exist or that the RPC system failed to con‐
359 tact the remote portmap service. In the latter case, the global
360 variable rpc_createerr() contains the RPC status.
361
362 enum clnt_stat
363 pmap_rmtcall(addr, prognum, versnum, procnum, inproc, in, outproc, out, tout, portp)
364 struct sockaddr_in *addr;
365 u_long prognum, versnum, procnum;
366 char *in, *out;
367 xdrproc_t inproc, outproc;
368 struct timeval tout;
369 u_long *portp;
370
371 A user interface to the portmap service, which instructs portmap
372 on the host at IP address *addr to make an RPC call on your
373 behalf to a procedure on that host. The parameter *portp will
374 be modified to the program's port number if the procedure suc‐
375 ceeds. The definitions of other parameters are discussed in
376 callrpc() and clnt_call(). This procedure should be used for a
377 “ping” and nothing else. See also clnt_broadcast().
378
379 pmap_set(prognum, versnum, protocol, port)
380 u_long prognum, versnum, protocol;
381 u_short port;
382
383 A user interface to the portmap service, which establishes a
384 mapping between the triple [prognum,versnum,protocol] and port
385 on the machine's portmap service. The value of protocol is most
386 likely IPPROTO_UDP or IPPROTO_TCP. This routine returns one if
387 it succeeds, zero otherwise. Automatically done by svc_regis‐
388 ter().
389
390 pmap_unset(prognum, versnum)
391 u_long prognum, versnum;
392
393 A user interface to the portmap service, which destroys all map‐
394 ping between the triple [prognum,versnum,*] and ports on the
395 machine's portmap service. This routine returns one if it suc‐
396 ceeds, zero otherwise.
397
398 registerrpc(prognum, versnum, procnum, procname, inproc, outproc)
399 u_long prognum, versnum, procnum;
400 char *(*procname) () ;
401 xdrproc_t inproc, outproc;
402
403 Register procedure procname with the RPC service package. If a
404 request arrives for program prognum, version versnum, and proce‐
405 dure procnum, procname is called with a pointer to its parame‐
406 ter(s); progname should return a pointer to its static
407 result(s); inproc is used to decode the parameters while outproc
408 is used to encode the results. This routine returns zero if the
409 registration succeeded, -1 otherwise.
410
411 Warning: remote procedures registered in this form are accessed
412 using the UDP/IP transport; see svcudp_create() for restric‐
413 tions.
414
415 struct rpc_createerr rpc_createerr;
416
417 A global variable whose value is set by any RPC client creation
418 routine that does not succeed. Use the routine clnt_pcreateer‐
419 ror() to print the reason why.
420
421 svc_destroy(xprt)
422 SVCXPRT *
423 xprt;
424
425 A macro that destroys the RPC service transport handle, xprt.
426 Destruction usually involves deallocation of private data struc‐
427 tures, including xprt itself. Use of xprt is undefined after
428 calling this routine.
429
430 fd_set svc_fdset;
431
432 A global variable reflecting the RPC service side's read file
433 descriptor bit mask; it is suitable as a parameter to the
434 select() system call. This is only of interest if a service
435 implementor does not call svc_run(), but rather does his own
436 asynchronous event processing. This variable is read-only (do
437 not pass its address to select()!), yet it may change after
438 calls to svc_getreqset() or any creation routines.
439
440 int svc_fds;
441
442 Similar to svc_fdset, but limited to 32 descriptors. This inter‐
443 face is obsoleted by svc_fdset.
444
445 svc_freeargs(xprt, inproc, in)
446 SVCXPRT *xprt;
447 xdrproc_t inproc;
448 char *in;
449
450 A macro that frees any data allocated by the RPC/XDR system when
451 it decoded the arguments to a service procedure using
452 svc_getargs(). This routine returns 1 if the results were suc‐
453 cessfully freed, and zero otherwise.
454
455 svc_getargs(xprt, inproc, in)
456 SVCXPRT *xprt;
457 xdrproc_t inproc;
458 char *in;
459
460 A macro that decodes the arguments of an RPC request associated
461 with the RPC service transport handle, xprt. The parameter in
462 is the address where the arguments will be placed; inproc is the
463 XDR routine used to decode the arguments. This routine returns
464 one if decoding succeeds, and zero otherwise.
465
466 struct sockaddr_in *
467 svc_getcaller(xprt)
468 SVCXPRT *xprt;
469
470 The approved way of getting the network address of the caller of
471 a procedure associated with the RPC service transport handle,
472 xprt.
473
474 svc_getreqset(rdfds)
475 fd_set *rdfds;
476
477 This routine is only of interest if a service implementor does
478 not call svc_run(), but instead implements custom asynchronous
479 event processing. It is called when the select() system call
480 has determined that an RPC request has arrived on some RPC
481 socket(s) ; rdfds is the resultant read file descriptor bit
482 mask. The routine returns when all sockets associated with the
483 value of rdfds have been serviced.
484
485 svc_getreq(rdfds)
486 int rdfds;
487
488 Similar to svc_getreqset(), but limited to 32 descriptors. This
489 interface is obsoleted by svc_getreqset().
490
491 svc_register(xprt, prognum, versnum, dispatch, protocol)
492 SVCXPRT *xprt;
493 u_long prognum, versnum;
494 void (*dispatch) ();
495 u_long protocol;
496
497 Associates prognum and versnum with the service dispatch proce‐
498 dure, dispatch. If protocol is zero, the service is not regis‐
499 tered with the portmap service. If protocol is non-zero, then a
500 mapping of the triple [prognum,versnum,protocol] to
501 xprt->xp_port is established with the local portmap service
502 (generally protocol is zero, IPPROTO_UDP or IPPROTO_TCP ). The
503 procedure dispatch has the following form:
504 dispatch(request, xprt)
505 struct svc_req *request;
506 SVCXPRT *xprt;
507
508 The svc_register() routine returns one if it succeeds, and zero
509 otherwise.
510
511 svc_run()
512
513 This routine never returns. It waits for RPC requests to arrive,
514 and calls the appropriate service procedure using svc_getreq()
515 when one arrives. This procedure is usually waiting for a
516 select() system call to return.
517
518 svc_sendreply(xprt, outproc, out)
519 SVCXPRT *xprt;
520 xdrproc_t outproc;
521 char *out;
522
523 Called by an RPC service's dispatch routine to send the results
524 of a remote procedure call. The parameter xprt is the request's
525 associated transport handle; outproc is the XDR routine which is
526 used to encode the results; and out is the address of the
527 results. This routine returns one if it succeeds, zero other‐
528 wise.
529
530 void
531 svc_unregister(prognum, versnum)
532 u_long prognum, versnum;
533
534 Remove all mapping of the double [prognum,versnum] to dispatch
535 routines, and of the triple [prognum,versnum,*] to port number.
536
537 void
538 svcerr_auth(xprt, why)
539 SVCXPRT *xprt;
540 enum auth_stat why;
541
542 Called by a service dispatch routine that refuses to perform a
543 remote procedure call due to an authentication error.
544
545 void
546 svcerr_decode(xprt)
547 SVCXPRT *xprt;
548
549 Called by a service dispatch routine that cannot successfully
550 decode its parameters. See also svc_getargs().
551
552 void
553 svcerr_noproc(xprt)
554 SVCXPRT *xprt;
555
556 Called by a service dispatch routine that does not implement the
557 procedure number that the caller requests.
558
559 void
560 svcerr_noprog(xprt)
561 SVCXPRT *xprt;
562
563 Called when the desired program is not registered with the RPC
564 package. Service implementors usually do not need this routine.
565
566 void
567 svcerr_progvers(xprt)
568 SVCXPRT *xprt;
569
570 Called when the desired version of a program is not registered
571 with the RPC package. Service implementors usually do not need
572 this routine.
573
574 void
575 svcerr_systemerr(xprt)
576 SVCXPRT *xprt;
577
578 Called by a service dispatch routine when it detects a system
579 error not covered by any particular protocol. For example, if a
580 service can no longer allocate storage, it may call this rou‐
581 tine.
582
583 void
584 svcerr_weakauth(xprt)
585 SVCXPRT *xprt;
586
587 Called by a service dispatch routine that refuses to perform a
588 remote procedure call due to insufficient authentication parame‐
589 ters. The routine calls svcerr_auth(xprt, AUTH_TOOWEAK).
590
591 SVCXPRT *
592 svcfd_create(fd, sendsize, recvsize)
593 int fd;
594 u_int sendsize;
595 u_int recvsize;
596
597 Create a service on top of any open descriptor. Typically, this
598 descriptor is a connected socket for a stream protocol such as
599 TCP. sendsize and recvsize indicate sizes for the send and
600 receive buffers. If they are zero, a reasonable default is cho‐
601 sen.
602
603 SVCXPRT *
604 svcraw_create()
605
606 This routine creates a toy RPC service transport, to which it
607 returns a pointer. The transport is really a buffer within the
608 process's address space, so the corresponding RPC client should
609 live in the same address space; see clntraw_create(). This rou‐
610 tine allows simulation of RPC and acquisition of RPC overheads
611 (such as round trip times), without any kernel interference.
612 This routine returns NULL if it fails.
613
614 SVCXPRT *
615 svctcp_create(sock, send_buf_size, recv_buf_size)
616 int sock;
617 u_int send_buf_size, recv_buf_size;
618
619 This routine creates a TCP/IP-based RPC service transport, to
620 which it returns a pointer. The transport is associated with
621 the socket sock, which may be RPC_ANYSOCK, in which case a new
622 socket is created. If the socket is not bound to a local TCP
623 port, then this routine binds it to an arbitrary port. Upon
624 completion, xprt->xp_sock is the transport's socket descriptor,
625 and xprt->xp_port is the transport's port number. This routine
626 returns NULL if it fails. Since TCP-based RPC uses buffered I/O
627 , users may specify the size of buffers; values of zero choose
628 suitable defaults.
629
630 SVCXPRT *
631 svcudp_bufcreate(sock, sendsize, recosize)
632 int sock;
633
634 This routine creates a UDP/IP-based RPC service transport, to
635 which it returns a pointer. The transport is associated with
636 the socket sock, which may be RPC_ANYSOCK, in which case a new
637 socket is created. If the socket is not bound to a local UDP
638 port, then this routine binds it to an arbitrary port. Upon com‐
639 pletion, xprt->xp_sock is the transport's socket descriptor, and
640 xprt->xp_port is the transport's port number. This routine
641 returns NULL if it fails.
642
643 This allows the user to specify the maximum packet size for
644 sending and receiving UDP-based RPC messages.
645
646 SVCXPRT *
647 svcudp_create(sock)
648 int sock;
649
650 This call is equivalent to svcudp_bufcreate(sock,SZ,SZ) for some
651 default size SZ.
652
653 xdr_accepted_reply(xdrs, ar)
654 XDR *xdrs;
655 struct accepted_reply *ar;
656
657 Used for encoding RPC reply messages. This routine is useful for
658 users who wish to generate RPC-style messages without using the
659 RPC package.
660
661 xdr_authunix_parms(xdrs, aupp)
662 XDR *xdrs;
663 struct authunix_parms *aupp;
664
665 Used for describing UNIX credentials. This routine is useful for
666 users who wish to generate these credentials without using the
667 RPC authentication package.
668
669 void
670 xdr_callhdr(xdrs, chdr)
671 XDR *xdrs;
672 struct rpc_msg *chdr;
673
674 Used for describing RPC call header messages. This routine is
675 useful for users who wish to generate RPC-style messages without
676 using the RPC package.
677
678 xdr_callmsg(xdrs, cmsg)
679 XDR *xdrs;
680 struct rpc_msg *cmsg;
681
682 Used for describing RPC call messages. This routine is useful
683 for users who wish to generate RPC-style messages without using
684 the RPC package.
685
686 xdr_opaque_auth(xdrs, ap)
687 XDR *xdrs;
688 struct opaque_auth *ap;
689
690 Used for describing RPC authentication information messages.
691 This routine is useful for users who wish to generate RPC-style
692 messages without using the RPC package.
693
694 xdr_pmap(xdrs, regs)
695 XDR *xdrs;
696 struct pmap *regs;
697
698 Used for describing parameters to various portmap procedures,
699 externally. This routine is useful for users who wish to gener‐
700 ate these parameters without using the pmap interface.
701
702 xdr_pmaplist(xdrs, rp)
703 XDR *xdrs;
704 struct pmaplist **rp;
705
706 Used for describing a list of port mappings, externally. This
707 routine is useful for users who wish to generate these parame‐
708 ters without using the pmap interface.
709
710 xdr_rejected_reply(xdrs, rr)
711 XDR *xdrs;
712 struct rejected_reply *rr;
713
714 Used for describing RPC reply messages. This routine is useful
715 for users who wish to generate RPC-style messages without using
716 the RPC package.
717
718 xdr_replymsg(xdrs, rmsg)
719 XDR *xdrs;
720 struct rpc_msg *rmsg;
721
722 Used for describing RPC reply messages. This routine is useful
723 for users who wish to generate RPC style messages without using
724 the RPC package.
725
726 void
727 xprt_register(xprt)
728 SVCXPRT *xprt;
729
730 After RPC service transport handles are created, they should
731 register themselves with the RPC service package. This routine
732 modifies the global variable svc_fds(). Service implementors
733 usually do not need this routine.
734
735 void
736 xprt_unregister(xprt)
737 SVCXPRT *xprt;
738
739 Before an RPC service transport handle is destroyed, it should
740 unregister itself with the RPC service package. This routine
741 modifies the global variable svc_fds(). Service implementors
742 usually do not need this routine.
743
745 xdr(3)
746 The following manuals:
747 Remote Procedure Calls: Protocol Specification
748 Remote Procedure Call Programming Guide
749 rpcgen Programming Guide
750 RPC: Remote Procedure Call Protocol Specification, RFC 1050, Sun
751 Microsystems, Inc., USC-ISI.
752
753
754
755 1988-02-16 RPC(3)