Bring in a transport-independent RPC (TI-RPC).
[dragonfly.git] / lib / libc / rpc / rpc_soc.3
1 .\" @(#)rpc.3n  2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI
2 .\" $NetBSD: rpc_soc.3,v 1.2 2000/06/07 13:39:43 simonb Exp $
3 .\" $FreeBSD: src/lib/libc/rpc/rpc_soc.3,v 1.12 2003/02/06 11:04:47 charnier Exp $
4 .\" $DragonFly$
5 .\"
6 .Dd February 16, 1988
7 .Dt RPC_SOC 3
8 .Os
9 .Sh NAME
10 .Nm rpc_soc ,
11 .Nm auth_destroy ,
12 .Nm authnone_create ,
13 .Nm authunix_create ,
14 .Nm authunix_create_default ,
15 .Nm callrpc ,
16 .Nm clnt_broadcast ,
17 .Nm clnt_call ,
18 .Nm clnt_control ,
19 .Nm clnt_create ,
20 .Nm clnt_destroy ,
21 .Nm clnt_freeres ,
22 .Nm clnt_geterr ,
23 .Nm clnt_pcreateerror ,
24 .Nm clnt_perrno ,
25 .Nm clnt_perror ,
26 .Nm clnt_spcreateerror ,
27 .Nm clnt_sperrno ,
28 .Nm clnt_sperror ,
29 .Nm clntraw_create ,
30 .Nm clnttcp_create ,
31 .Nm clntudp_bufcreate ,
32 .Nm clntudp_create ,
33 .Nm clntunix_create ,
34 .Nm get_myaddress ,
35 .Nm pmap_getmaps ,
36 .Nm pmap_getport ,
37 .Nm pmap_rmtcall ,
38 .Nm pmap_set ,
39 .Nm pmap_unset ,
40 .Nm registerrpc ,
41 .Nm rpc_createerr ,
42 .Nm svc_destroy ,
43 .Nm svc_fds ,
44 .Nm svc_fdset ,
45 .Nm svc_getargs ,
46 .Nm svc_getcaller ,
47 .Nm svc_getreq ,
48 .Nm svc_getreqset ,
49 .Nm svc_register ,
50 .Nm svc_run ,
51 .Nm svc_sendreply ,
52 .Nm svc_unregister ,
53 .Nm svcerr_auth ,
54 .Nm svcerr_decode ,
55 .Nm svcerr_noproc ,
56 .Nm svcerr_noprog ,
57 .Nm svcerr_progvers ,
58 .Nm svcerr_systemerr ,
59 .Nm svcerr_weakauth ,
60 .Nm svcfd_create ,
61 .Nm svcunixfd_create ,
62 .Nm svcraw_create ,
63 .Nm svcunix_create ,
64 .Nm xdr_accepted_reply ,
65 .Nm xdr_authunix_parms ,
66 .Nm xdr_callhdr ,
67 .Nm xdr_callmsg ,
68 .Nm xdr_opaque_auth ,
69 .Nm xdr_pmap ,
70 .Nm xdr_pmaplist ,
71 .Nm xdr_rejected_reply ,
72 .Nm xdr_replymsg ,
73 .Nm xprt_register ,
74 .Nm xprt_unregister
75 .Nd "library routines for remote procedure calls"
76 .Sh LIBRARY
77 .Lb libc
78 .Sh SYNOPSIS
79 .In rpc/rpc.h
80 .Pp
81 See
82 .Sx DESCRIPTION
83 for function declarations.
84 .Sh DESCRIPTION
85 .Bf -symbolic
86 The
87 .Fn svc_*
88 and
89 .Fn clnt_*
90 functions described in this page are the old, TS-RPC
91 interface to the XDR and RPC library, and exist for backward compatibility.
92 The new interface is described in the pages
93 referenced from
94 .Xr rpc 3 .
95 .Ef
96 .Pp
97 These routines allow C programs to make procedure
98 calls on other machines across the network.
99 First, the client calls a procedure to send a
100 data packet to the server.
101 Upon receipt of the packet, the server calls a dispatch routine
102 to perform the requested service, and then sends back a
103 reply.
104 Finally, the procedure call returns to the client.
105 .Pp
106 Routines that are used for Secure
107 .Tn RPC ( DES
108 authentication) are described in
109 .Xr rpc_secure 3 .
110 Secure
111 .Tn RPC
112 can be used only if
113 .Tn DES
114 encryption is available.
115 .Pp
116 .Bl -tag -width indent -compact
117 .It Xo
118 .Ft void
119 .Xc
120 .It Xo
121 .Fn auth_destroy "AUTH *auth"
122 .Xc
123 .Pp
124 A macro that destroys the authentication information associated with
125 .Fa auth .
126 Destruction usually involves deallocation of private data
127 structures.
128 The use of
129 .Fa auth
130 is undefined after calling
131 .Fn auth_destroy .
132 .Pp
133 .It Xo
134 .Ft "AUTH *"
135 .Xc
136 .It Xo
137 .Fn authnone_create
138 .Xc
139 .Pp
140 Create and return an
141 .Tn RPC
142 authentication handle that passes nonusable authentication
143 information with each remote procedure call.
144 This is the
145 default authentication used by
146 .Tn RPC .
147 .Pp
148 .It Xo
149 .Ft "AUTH *"
150 .Xc
151 .It Xo
152 .Fn authunix_create "char *host" "int uid" "int gid" "int len" "int *aup_gids"
153 .Xc
154 .Pp
155 Create and return an
156 .Tn RPC
157 authentication handle that contains
158 .Ux
159 authentication information.
160 The
161 .Fa host
162 argument
163 is the name of the machine on which the information was
164 created;
165 .Fa uid
166 is the user's user ID;
167 .Fa gid
168 is the user's current group ID;
169 .Fa len
170 and
171 .Fa aup_gids
172 refer to a counted array of groups to which the user belongs.
173 It is easy to impersonate a user.
174 .Pp
175 .It Xo
176 .Ft "AUTH *"
177 .Xc
178 .It Xo
179 .Fn authunix_create_default
180 .Xc
181 .Pp
182 Calls
183 .Fn authunix_create
184 with the appropriate arguments.
185 .Pp
186 .It Xo
187 .Ft int
188 .Fo callrpc
189 .Fa "char *host"
190 .Fa "u_long prognum"
191 .Fa "u_long versnum"
192 .Fa "u_long procnum"
193 .Fa "xdrproc_t inproc"
194 .Fa "void *in"
195 .Fa "xdrproc_t outproc"
196 .Fa "void *out"
197 .Fc
198 .Xc
199 .Pp
200 Call the remote procedure associated with
201 .Fa prognum ,
202 .Fa versnum ,
203 and
204 .Fa procnum
205 on the machine
206 .Fa host .
207 The
208 .Fa in
209 argument
210 is the address of the procedure's argument(s), and
211 .Fa out
212 is the address of where to place the result(s);
213 .Fa inproc
214 is used to encode the procedure's arguments, and
215 .Fa outproc
216 is used to decode the procedure's results.
217 This routine returns zero if it succeeds, or the value of
218 .Vt "enum clnt_stat"
219 cast to an integer if it fails.
220 The routine
221 .Fn clnt_perrno
222 is handy for translating failure statuses into messages.
223 .Pp
224 Warning: calling remote procedures with this routine
225 uses
226 .Tn UDP/IP
227 as a transport; see
228 .Fn clntudp_create
229 for restrictions.
230 You do not have control of timeouts or authentication using
231 this routine.
232 .Pp
233 .It Xo
234 .Ft "enum clnt_stat"
235 .Xc
236 .It Xo
237 .Fo clnt_broadcast
238 .Fa "u_long prognum"
239 .Fa "u_long versnum"
240 .Fa "u_long procnum"
241 .Fa "xdrproc_t inproc"
242 .Fa "char *in"
243 .Fa "xdrproc_t outproc"
244 .Fa "char *out"
245 .Fa "bool_t (*eachresult)(caddr_t, struct sockaddr_in *)"
246 .Fc
247 .Xc
248 .Pp
249 Like
250 .Fn callrpc ,
251 except the call message is broadcast to all locally
252 connected broadcast nets.
253 Each time it receives a
254 response, this routine calls
255 .Fn eachresult ,
256 whose form is:
257 .Bd -ragged -offset indent
258 .Ft bool_t
259 .Fn eachresult "caddr_t out" "struct sockaddr_in *addr"
260 .Ed
261 .Pp
262 where
263 .Fa out
264 is the same as
265 .Fa out
266 passed to
267 .Fn clnt_broadcast ,
268 except that the remote procedure's output is decoded there;
269 .Fa addr
270 points to the address of the machine that sent the results.
271 If
272 .Fn eachresult
273 returns zero,
274 .Fn clnt_broadcast
275 waits for more replies; otherwise it returns with appropriate
276 status.
277 .Pp
278 Warning: broadcast sockets are limited in size to the
279 maximum transfer unit of the data link.
280 For ethernet,
281 this value is 1500 bytes.
282 .Pp
283 .It Xo
284 .Ft "enum clnt_stat"
285 .Xc
286 .It Xo
287 .Fo clnt_call
288 .Fa "CLIENT *clnt"
289 .Fa "u_long procnum"
290 .Fa "xdrproc_t inproc"
291 .Fa "char *in"
292 .Fa "xdrproc_t outproc"
293 .Fa "char *out"
294 .Fa "struct timeval tout"
295 .Fc
296 .Xc
297 .Pp
298 A macro that calls the remote procedure
299 .Fa procnum
300 associated with the client handle,
301 .Fa clnt ,
302 which is obtained with an
303 .Tn RPC
304 client creation routine such as
305 .Fn clnt_create .
306 The
307 .Fa in
308 argument
309 is the address of the procedure's argument(s), and
310 .Fa out
311 is the address of where to place the result(s);
312 .Fa inproc
313 is used to encode the procedure's arguments, and
314 .Fa outproc
315 is used to decode the procedure's results;
316 .Fa tout
317 is the time allowed for results to come back.
318 .Pp
319 .It Xo
320 .Ft void
321 .Fn clnt_destroy "CLIENT *clnt"
322 .Xc
323 .Pp
324 A macro that destroys the client's
325 .Tn RPC
326 handle.
327 Destruction usually involves deallocation
328 of private data structures, including
329 .Fa clnt
330 itself.
331 Use of
332 .Fa clnt
333 is undefined after calling
334 .Fn clnt_destroy .
335 If the
336 .Tn RPC
337 library opened the associated socket, it will close it also.
338 Otherwise, the socket remains open.
339 .Pp
340 .It Xo
341 .Ft CLIENT *
342 .Xc
343 .It Xo
344 .Fn clnt_create "const char *host" "u_long prog" "u_long vers" "const char *proto"
345 .Xc
346 .Pp
347 Generic client creation routine.
348 The
349 .Fa host
350 argument
351 identifies the name of the remote host where the server
352 is located.
353 The
354 .Fa proto
355 argument
356 indicates which kind of transport protocol to use.
357 The
358 currently supported values for this field are
359 .Qq Li udp
360 and
361 .Qq Li tcp .
362 Default timeouts are set, but can be modified using
363 .Fn clnt_control .
364 .Pp
365 Warning: Using
366 .Tn UDP
367 has its shortcomings.
368 Since
369 .Tn UDP Ns \-based
370 .Tn RPC
371 messages can only hold up to 8 Kbytes of encoded data,
372 this transport cannot be used for procedures that take
373 large arguments or return huge results.
374 .Pp
375 .It Xo
376 .Ft bool_t
377 .Xc
378 .It Xo
379 .Fn clnt_control "CLIENT *cl" "u_int req" "char *info"
380 .Xc
381 .Pp
382 A macro used to change or retrieve various information
383 about a client object.
384 The
385 .Fa req
386 argument
387 indicates the type of operation, and
388 .Fa info
389 is a pointer to the information.
390 For both
391 .Tn UDP
392 and
393 .Tn TCP ,
394 the supported values of
395 .Fa req
396 and their argument types and what they do are:
397 .Bl -column "CLSET_RETRY_TIMEOUT" "struct sockaddr_in"
398 .It Dv CLSET_TIMEOUT Ta Xo
399 .Vt "struct timeval" Ta "set total timeout"
400 .Xc
401 .It Dv CLGET_TIMEOUT Ta Xo
402 .Vt "struct timeval" Ta "get total timeout"
403 .Xc
404 .El
405 .Pp
406 Note: if you set the timeout using
407 .Fn clnt_control ,
408 the timeout argument passed to
409 .Fn clnt_call
410 will be ignored in all future calls.
411 .Bl -column "CLSET_RETRY_TIMEOUT" "struct sockaddr_in"
412 .It Dv CLGET_SERVER_ADDR Ta Xo
413 .Vt "struct sockaddr_in" Ta "get server's address"
414 .Xc
415 .El
416 .Pp
417 The following operations are valid for
418 .Tn UDP
419 only:
420 .Bl -column "CLSET_RETRY_TIMEOUT" "struct sockaddr_in"
421 .It Dv CLSET_RETRY_TIMEOUT Ta Xo
422 .Vt "struct timeval" Ta "set the retry timeout"
423 .Xc
424 .It Dv CLGET_RETRY_TIMEOUT Ta Xo
425 .Vt "struct timeval" Ta "get the retry timeout"
426 .Xc
427 .El
428 .Pp
429 The retry timeout is the time that
430 .Tn "UDP RPC"
431 waits for the server to reply before
432 retransmitting the request.
433 .Pp
434 .It Xo
435 .Ft bool_t
436 .Fn clnt_freeres "CLIENT *clnt" "xdrproc_t outproc" "char *out"
437 .Xc
438 .Pp
439 A macro that frees any data allocated by the
440 .Tn RPC/XDR
441 system when it decoded the results of an
442 .Tn RPC
443 call.
444 The
445 .Fa out
446 argument
447 is the address of the results, and
448 .Fa outproc
449 is the
450 .Tn XDR
451 routine describing the results.
452 This routine returns one if the results were successfully
453 freed,
454 and zero otherwise.
455 .Pp
456 .It Xo
457 .Ft void
458 .Xc
459 .It Xo
460 .Fn clnt_geterr "CLIENT *clnt" "struct rpc_err *errp"
461 .Xc
462 .Pp
463 A macro that copies the error structure out of the client
464 handle
465 to the structure at address
466 .Fa errp .
467 .Pp
468 .It Xo
469 .Ft void
470 .Xc
471 .It Xo
472 .Fn clnt_pcreateerror "const char *s"
473 .Xc
474 .Pp
475 prints a message to standard error indicating
476 why a client
477 .Tn RPC
478 handle could not be created.
479 The message is prepended with string
480 .Fa s
481 and a colon.
482 A newline is appended at the end of the message.
483 Used when a
484 .Fn clnt_create ,
485 .Fn clntraw_create ,
486 .Fn clnttcp_create ,
487 or
488 .Fn clntudp_create
489 call fails.
490 .Pp
491 .It Xo
492 .Ft void
493 .Xc
494 .It Xo
495 .Fn clnt_perrno "enum clnt_stat stat"
496 .Xc
497 .Pp
498 Print a message to standard error corresponding
499 to the condition indicated by
500 .Fa stat .
501 A newline is appended at the end of the message.
502 Used after
503 .Fn callrpc .
504 .Pp
505 .It Xo
506 .Ft void
507 .Fn clnt_perror "CLIENT *clnt" "const char *s"
508 .Xc
509 .Pp
510 Print a message to standard error indicating why an
511 .Tn RPC
512 call failed;
513 .Fa clnt
514 is the handle used to do the call.
515 The message is prepended with string
516 .Fa s
517 and a colon.
518 A newline is appended at the end of the message.
519 Used after
520 .Fn clnt_call .
521 .Pp
522 .It Xo
523 .Ft "char *"
524 .Xc
525 .It Xo
526 .Fn clnt_spcreateerror "const char *s"
527 .Xc
528 .Pp
529 Like
530 .Fn clnt_pcreateerror ,
531 except that it returns a string
532 instead of printing to the standard error.
533 .Pp
534 Bugs: returns pointer to static data that is overwritten
535 on each call.
536 .Pp
537 .It Xo
538 .Ft "char *"
539 .Xc
540 .It Xo
541 .Fn clnt_sperrno "enum clnt_stat stat"
542 .Xc
543 .Pp
544 Take the same arguments as
545 .Fn clnt_perrno ,
546 but instead of sending a message to the standard error
547 indicating why an
548 .Tn RPC
549 call failed, return a pointer to a string which contains
550 the message.
551 .Pp
552 The
553 .Fn clnt_sperrno
554 function
555 is used instead of
556 .Fn clnt_perrno
557 if the program does not have a standard error (as a program
558 running as a server quite likely does not), or if the
559 programmer
560 does not want the message to be output with
561 .Fn printf ,
562 or if a message format different from that supported by
563 .Fn clnt_perrno
564 is to be used.
565 .Pp
566 Note: unlike
567 .Fn clnt_sperror
568 and
569 .Fn clnt_spcreateerror ,
570 .Fn clnt_sperrno
571 returns pointer to static data, but the
572 result will not get overwritten on each call.
573 .Pp
574 .It Xo
575 .Ft "char *"
576 .Xc
577 .It Xo
578 .Fn clnt_sperror "CLIENT *rpch" "const char *s"
579 .Xc
580 .Pp
581 Like
582 .Fn clnt_perror ,
583 except that (like
584 .Fn clnt_sperrno )
585 it returns a string instead of printing to standard error.
586 .Pp
587 Bugs: returns pointer to static data that is overwritten
588 on each call.
589 .Pp
590 .It Xo
591 .Ft "CLIENT *"
592 .Xc
593 .It Xo
594 .Fn clntraw_create "u_long prognum" "u_long versnum"
595 .Xc
596 .Pp
597 This routine creates a toy
598 .Tn RPC
599 client for the remote program
600 .Fa prognum ,
601 version
602 .Fa versnum .
603 The transport used to pass messages to the service is
604 actually a buffer within the process's address space, so the
605 corresponding
606 .Tn RPC
607 server should live in the same address space; see
608 .Fn svcraw_create .
609 This allows simulation of
610 .Tn RPC
611 and acquisition of
612 .Tn RPC
613 overheads, such as round trip times, without any
614 kernel interference.
615 This routine returns
616 .Dv NULL
617 if it fails.
618 .Pp
619 .It Xo
620 .Ft "CLIENT *"
621 .Xc
622 .It Xo
623 .Fo clnttcp_create
624 .Fa "struct sockaddr_in *addr"
625 .Fa "u_long prognum"
626 .Fa "u_long versnum"
627 .Fa "int *sockp"
628 .Fa "u_int sendsz"
629 .Fa "u_int recvsz"
630 .Fc
631 .Xc
632 .Pp
633 This routine creates an
634 .Tn RPC
635 client for the remote program
636 .Fa prognum ,
637 version
638 .Fa versnum ;
639 the client uses
640 .Tn TCP/IP
641 as a transport.
642 The remote program is located at Internet
643 address
644 .Fa addr .
645 If
646 .Fa addr\->sin_port
647 is zero, then it is set to the actual port that the remote
648 program is listening on (the remote
649 .Xr rpcbind 8
650 service is consulted for this information).
651 The
652 .Fa sockp
653 argument
654 is a socket; if it is
655 .Dv RPC_ANYSOCK ,
656 then this routine opens a new one and sets
657 .Fa sockp .
658 Since
659 .Tn TCP Ns \-based
660 .Tn RPC
661 uses buffered
662 .Tn I/O ,
663 the user may specify the size of the send and receive buffers
664 with the
665 .Fa sendsz
666 and
667 .Fa recvsz
668 arguments;
669 values of zero choose suitable defaults.
670 This routine returns
671 .Dv NULL
672 if it fails.
673 .Pp
674 .It Xo
675 .Ft "CLIENT *"
676 .Xc
677 .It Xo
678 .Fo clntudp_create
679 .Fa "struct sockaddr_in *addr"
680 .Fa "u_long prognum"
681 .Fa "u_long versnum"
682 .Fa "struct timeval wait"
683 .Fa "int *sockp"
684 .Fc
685 .Xc
686 .Pp
687 This routine creates an
688 .Tn RPC
689 client for the remote program
690 .Fa prognum ,
691 version
692 .Fa versnum ;
693 the client uses
694 .Tn UDP/IP
695 as a transport.
696 The remote program is located at Internet
697 address
698 .Fa addr .
699 If
700 .Fa addr\->sin_port
701 is zero, then it is set to actual port that the remote
702 program is listening on (the remote
703 .Xr rpcbind 8
704 service is consulted for this information).
705 The
706 .Fa sockp
707 argument
708 is a socket; if it is
709 .Dv RPC_ANYSOCK ,
710 then this routine opens a new one and sets
711 .Fa sockp .
712 The
713 .Tn UDP
714 transport resends the call message in intervals of
715 .Fa wait
716 time until a response is received or until the call times
717 out.
718 The total time for the call to time out is specified by
719 .Fn clnt_call .
720 .Pp
721 Warning: since
722 .Tn UDP Ns \-based
723 .Tn RPC
724 messages can only hold up to 8 Kbytes
725 of encoded data, this transport cannot be used for procedures
726 that take large arguments or return huge results.
727 .Pp
728 .It Xo
729 .Ft "CLIENT *"
730 .Xc
731 .It Xo
732 .Fo clntudp_bufcreate
733 .Fa "struct sockaddr_in *addr"
734 .Fa "u_long prognum"
735 .Fa "u_long versnum"
736 .Fa "struct timeval wait"
737 .Fa "int *sockp"
738 .Fa "unsigned int sendsize"
739 .Fa "unsigned int recosize"
740 .Fc
741 .Xc
742 .Pp
743 This routine creates an
744 .Tn RPC
745 client for the remote program
746 .Fa prognum ,
747 on
748 .Fa versnum ;
749 the client uses
750 .Tn UDP/IP
751 as a transport.
752 The remote program is located at Internet
753 address
754 .Fa addr .
755 If
756 .Fa addr\->sin_port
757 is zero, then it is set to actual port that the remote
758 program is listening on (the remote
759 .Xr rpcbind 8
760 service is consulted for this information).
761 The
762 .Fa sockp
763 argument
764 is a socket; if it is
765 .Dv RPC_ANYSOCK ,
766 then this routine opens a new one and sets
767 .Fa sockp .
768 The
769 .Tn UDP
770 transport resends the call message in intervals of
771 .Fa wait
772 time until a response is received or until the call times
773 out.
774 The total time for the call to time out is specified by
775 .Fn clnt_call .
776 .Pp
777 This allows the user to specify the maximum packet size
778 for sending and receiving
779 .Tn UDP Ns \-based
780 .Tn RPC
781 messages.
782 .Pp
783 .It Xo
784 .Ft "CLIENT *"
785 .Xc
786 .It Xo
787 .Fo clntunix_create
788 .Fa "struct sockaddr_un *raddr"
789 .Fa "u_long prognum"
790 .Fa "u_long versnum"
791 .Fa "int *sockp"
792 .Fa "u_int sendsz"
793 .Fa "u_int recvsz"
794 .Fc
795 .Xc
796 .Pp
797 This routine creates an
798 .Tn RPC
799 client for the local
800 program
801 .Fa prognum ,
802 version
803 .Fa versnum ;
804 the client uses
805 .Ux Ns -domain
806 sockets as a transport.
807 The local program is located at the
808 .Fa *raddr .
809 The
810 .Fa sockp
811 argument
812 is a socket; if it is
813 .Dv RPC_ANYSOCK ,
814 then this routine opens a new one and sets
815 .Fa sockp .
816 Since
817 .Ux Ns -based
818 .Tn RPC
819 uses buffered
820 .Tn I/O ,
821 the user may specify the size of the send and receive buffers
822 with the
823 .Fa sendsz
824 and
825 .Fa recvsz
826 arguments;
827 values of zero choose suitable defaults.
828 This routine returns
829 .Dv NULL
830 if it fails.
831 .Pp
832 .It Xo
833 .Ft int
834 .Xc
835 .It Xo
836 .Fn get_myaddress "struct sockaddr_in *addr"
837 .Xc
838 .Pp
839 Stuff the machine's
840 .Tn IP
841 address into
842 .Fa addr ,
843 without consulting the library routines that deal with
844 .Pa /etc/hosts .
845 The port number is always set to
846 .Fn htons PMAPPORT .
847 Returns zero on success, non-zero on failure.
848 .Pp
849 .It Xo
850 .Ft "struct pmaplist *"
851 .Xc
852 .It Xo
853 .Fn pmap_getmaps "struct sockaddr_in *addr"
854 .Xc
855 .Pp
856 A user interface to the
857 .Xr rpcbind 8
858 service, which returns a list of the current
859 .Tn RPC
860 program\-to\-port mappings
861 on the host located at
862 .Tn IP
863 address
864 .Fa addr .
865 This routine can return
866 .Dv NULL .
867 The command
868 .Dq Nm rpcinfo Fl p
869 uses this routine.
870 .Pp
871 .It Xo
872 .Ft u_short
873 .Xc
874 .It Xo
875 .Fo pmap_getport
876 .Fa "struct sockaddr_in *addr"
877 .Fa "u_long prognum"
878 .Fa "u_long versnum"
879 .Fa "u_long protocol"
880 .Fc
881 .Xc
882 .Pp
883 A user interface to the
884 .Xr rpcbind 8
885 service, which returns the port number
886 on which waits a service that supports program number
887 .Fa prognum ,
888 version
889 .Fa versnum ,
890 and speaks the transport protocol associated with
891 .Fa protocol .
892 The value of
893 .Fa protocol
894 is most likely
895 .Dv IPPROTO_UDP
896 or
897 .Dv IPPROTO_TCP .
898 A return value of zero means that the mapping does not exist
899 or that
900 the
901 .Tn RPC
902 system failed to contact the remote
903 .Xr rpcbind 8
904 service.
905 In the latter case, the global variable
906 .Va rpc_createerr
907 contains the
908 .Tn RPC
909 status.
910 .Pp
911 .It Xo
912 .Ft "enum clnt_stat"
913 .Xc
914 .It Xo
915 .Fo pmap_rmtcall
916 .Fa "struct sockaddr_in *addr"
917 .Fa "u_long prognum"
918 .Fa "u_long versnum"
919 .Fa "u_long procnum"
920 .Fa "xdrproc_t inproc"
921 .Fa "char *in"
922 .Fa "xdrproc_t outproc"
923 .Fa "char *out"
924 .Fa "struct timeval tout"
925 .Fa "u_long *portp"
926 .Fc
927 .Xc
928 .Pp
929 A user interface to the
930 .Xr rpcbind 8
931 service, which instructs
932 .Xr rpcbind 8
933 on the host at
934 .Tn IP
935 address
936 .Fa addr
937 to make an
938 .Tn RPC
939 call on your behalf to a procedure on that host.
940 The
941 .Fa portp
942 argument
943 will be modified to the program's port number if the
944 procedure
945 succeeds.
946 The definitions of other arguments are discussed
947 in
948 .Fn callrpc
949 and
950 .Fn clnt_call .
951 This procedure should be used for a
952 .Dq ping
953 and nothing
954 else.
955 See also
956 .Fn clnt_broadcast .
957 .Pp
958 .It Xo
959 .Ft bool_t
960 .Fn pmap_set "u_long prognum" "u_long versnum" "u_long protocol" "u_short port"
961 .Xc
962 .Pp
963 A user interface to the
964 .Xr rpcbind 8
965 service, which establishes a mapping between the triple
966 .Pq Fa prognum , versnum , protocol
967 and
968 .Fa port
969 on the machine's
970 .Xr rpcbind 8
971 service.
972 The value of
973 .Fa protocol
974 is most likely
975 .Dv IPPROTO_UDP
976 or
977 .Dv IPPROTO_TCP .
978 This routine returns one if it succeeds, zero otherwise.
979 Automatically done by
980 .Fn svc_register .
981 .Pp
982 .It Xo
983 .Ft bool_t
984 .Fn pmap_unset "u_long prognum" "u_long versnum"
985 .Xc
986 .Pp
987 A user interface to the
988 .Xr rpcbind 8
989 service, which destroys all mapping between the triple
990 .Pq Fa prognum , versnum , *
991 and
992 .Fa ports
993 on the machine's
994 .Xr rpcbind 8
995 service.
996 This routine returns one if it succeeds, zero
997 otherwise.
998 .Pp
999 .It Xo
1000 .Ft bool_t
1001 .Fo registerrpc
1002 .Fa "u_long prognum"
1003 .Fa "u_long versnum"
1004 .Fa "u_long procnum"
1005 .Fa "char *(*procname)(void)"
1006 .Fa "xdrproc_t inproc"
1007 .Fa "xdrproc_t outproc"
1008 .Fc
1009 .Xc
1010 .Pp
1011 Register procedure
1012 .Fa procname
1013 with the
1014 .Tn RPC
1015 service package.
1016 If a request arrives for program
1017 .Fa prognum ,
1018 version
1019 .Fa versnum ,
1020 and procedure
1021 .Fa procnum ,
1022 .Fa procname
1023 is called with a pointer to its argument(s);
1024 .Fa progname
1025 should return a pointer to its static result(s);
1026 .Fa inproc
1027 is used to decode the arguments while
1028 .Fa outproc
1029 is used to encode the results.
1030 This routine returns zero if the registration succeeded, \-1
1031 otherwise.
1032 .Pp
1033 Warning: remote procedures registered in this form
1034 are accessed using the
1035 .Tn UDP/IP
1036 transport; see
1037 .Fn svcudp_create
1038 for restrictions.
1039 .Pp
1040 .It Xo
1041 .Vt "struct rpc_createerr" rpc_createerr ;
1042 .Xc
1043 .Pp
1044 A global variable whose value is set by any
1045 .Tn RPC
1046 client creation routine
1047 that does not succeed.
1048 Use the routine
1049 .Fn clnt_pcreateerror
1050 to print the reason why.
1051 .Pp
1052 .It Xo
1053 .Ft bool_t
1054 .Fn svc_destroy "SVCXPRT * xprt"
1055 .Xc
1056 .Pp
1057 A macro that destroys the
1058 .Tn RPC
1059 service transport handle,
1060 .Fa xprt .
1061 Destruction usually involves deallocation
1062 of private data structures, including
1063 .Fa xprt
1064 itself.
1065 Use of
1066 .Fa xprt
1067 is undefined after calling this routine.
1068 .Pp
1069 .It Xo
1070 .Vt fd_set svc_fdset ;
1071 .Xc
1072 .Pp
1073 A global variable reflecting the
1074 .Tn RPC
1075 service side's
1076 read file descriptor bit mask; it is suitable as a template argument
1077 to the
1078 .Xr select 2
1079 system call.
1080 This is only of interest
1081 if a service implementor does not call
1082 .Fn svc_run ,
1083 but rather does his own asynchronous event processing.
1084 This variable is read\-only (do not pass its address to
1085 .Xr select 2 ! ) ,
1086 yet it may change after calls to
1087 .Fn svc_getreqset
1088 or any creation routines.
1089 As well, note that if the process has descriptor limits
1090 which are extended beyond
1091 .Dv FD_SETSIZE ,
1092 this variable will only be usable for the first
1093 .Dv FD_SETSIZE
1094 descriptors.
1095 .Pp
1096 .It Xo
1097 .Vt int svc_fds ;
1098 .Xc
1099 .Pp
1100 Similar to
1101 .Va svc_fdset ,
1102 but limited to 32 descriptors.
1103 This
1104 interface is obsoleted by
1105 .Va svc_fdset .
1106 .Pp
1107 .It Xo
1108 .Ft bool_t
1109 .Fn svc_freeargs "SVCXPRT *xprt" "xdrproc_t inproc" "char *in"
1110 .Xc
1111 .Pp
1112 A macro that frees any data allocated by the
1113 .Tn RPC/XDR
1114 system when it decoded the arguments to a service procedure
1115 using
1116 .Fn svc_getargs .
1117 This routine returns 1 if the results were successfully
1118 freed,
1119 and zero otherwise.
1120 .Pp
1121 .It Xo
1122 .Ft bool_t
1123 .Fn svc_getargs "SVCXPRT *xprt" "xdrproc_t inproc" "char *in"
1124 .Xc
1125 .Pp
1126 A macro that decodes the arguments of an
1127 .Tn RPC
1128 request
1129 associated with the
1130 .Tn RPC
1131 service transport handle,
1132 .Fa xprt .
1133 The
1134 .Fa in
1135 argument
1136 is the address where the arguments will be placed;
1137 .Fa inproc
1138 is the
1139 .Tn XDR
1140 routine used to decode the arguments.
1141 This routine returns one if decoding succeeds, and zero
1142 otherwise.
1143 .Pp
1144 .It Xo
1145 .Ft "struct sockaddr_in *"
1146 .Xc
1147 .It Xo
1148 .Fn svc_getcaller "SVCXPRT *xprt"
1149 .Xc
1150 .Pp
1151 The approved way of getting the network address of the caller
1152 of a procedure associated with the
1153 .Tn RPC
1154 service transport handle,
1155 .Fa xprt .
1156 .Pp
1157 .It Xo
1158 .Ft void
1159 .Fn svc_getreqset "fd_set *rdfds"
1160 .Xc
1161 .Pp
1162 This routine is only of interest if a service implementor
1163 does not call
1164 .Fn svc_run ,
1165 but instead implements custom asynchronous event processing.
1166 It is called when the
1167 .Xr select 2
1168 system call has determined that an
1169 .Tn RPC
1170 request has arrived on some
1171 .Tn RPC
1172 socket(s);
1173 .Fa rdfds
1174 is the resultant read file descriptor bit mask.
1175 The routine returns when all sockets associated with the
1176 value of
1177 .Fa rdfds
1178 have been serviced.
1179 .Pp
1180 .It Xo
1181 .Ft void
1182 .Fn svc_getreq "int rdfds"
1183 .Xc
1184 .Pp
1185 Similar to
1186 .Fn svc_getreqset ,
1187 but limited to 32 descriptors.
1188 This interface is obsoleted by
1189 .Fn svc_getreqset .
1190 .Pp
1191 .It Xo
1192 .Ft bool_t
1193 .Fo svc_register
1194 .Fa "SVCXPRT *xprt"
1195 .Fa "u_long prognum"
1196 .Fa "u_long versnum"
1197 .Fa "void (*dispatch)(struct svc_req *, SVCXPRT *)"
1198 .Fa "int protocol"
1199 .Fc
1200 .Xc
1201 .Pp
1202 Associates
1203 .Fa prognum
1204 and
1205 .Fa versnum
1206 with the service dispatch procedure,
1207 .Fn dispatch .
1208 If
1209 .Fa protocol
1210 is zero, the service is not registered with the
1211 .Xr rpcbind 8
1212 service.
1213 If
1214 .Fa protocol
1215 is non-zero, then a mapping of the triple
1216 .Pq Fa prognum , versnum , protocol
1217 to
1218 .Fa xprt\->xp_port
1219 is established with the local
1220 .Xr rpcbind 8
1221 service (generally
1222 .Fa protocol
1223 is zero,
1224 .Dv IPPROTO_UDP
1225 or
1226 .Dv IPPROTO_TCP ) .
1227 The procedure
1228 .Fn dispatch
1229 has the following form:
1230 .Bd -ragged -offset indent
1231 .Ft bool_t
1232 .Fn dispatch "struct svc_req *request" "SVCXPRT *xprt"
1233 .Ed
1234 .Pp
1235 The
1236 .Fn svc_register
1237 routine returns one if it succeeds, and zero otherwise.
1238 .Pp
1239 .It Xo
1240 .Fn svc_run
1241 .Xc
1242 .Pp
1243 This routine never returns.
1244 It waits for
1245 .Tn RPC
1246 requests to arrive, and calls the appropriate service
1247 procedure using
1248 .Fn svc_getreq
1249 when one arrives.
1250 This procedure is usually waiting for a
1251 .Xr select 2
1252 system call to return.
1253 .Pp
1254 .It Xo
1255 .Ft bool_t
1256 .Fn svc_sendreply "SVCXPRT *xprt" "xdrproc_t outproc" "char *out"
1257 .Xc
1258 .Pp
1259 Called by an
1260 .Tn RPC
1261 service's dispatch routine to send the results of a
1262 remote procedure call.
1263 The
1264 .Fa xprt
1265 argument
1266 is the request's associated transport handle;
1267 .Fa outproc
1268 is the
1269 .Tn XDR
1270 routine which is used to encode the results; and
1271 .Fa out
1272 is the address of the results.
1273 This routine returns one if it succeeds, zero otherwise.
1274 .Pp
1275 .It Xo
1276 .Ft void
1277 .Xc
1278 .It Xo
1279 .Fn svc_unregister "u_long prognum" "u_long versnum"
1280 .Xc
1281 .Pp
1282 Remove all mapping of the double
1283 .Pq Fa prognum , versnum
1284 to dispatch routines, and of the triple
1285 .Pq Fa prognum , versnum , *
1286 to port number.
1287 .Pp
1288 .It Xo
1289 .Ft void
1290 .Xc
1291 .It Xo
1292 .Fn svcerr_auth "SVCXPRT *xprt" "enum auth_stat why"
1293 .Xc
1294 .Pp
1295 Called by a service dispatch routine that refuses to perform
1296 a remote procedure call due to an authentication error.
1297 .Pp
1298 .It Xo
1299 .Ft void
1300 .Xc
1301 .It Xo
1302 .Fn svcerr_decode "SVCXPRT *xprt"
1303 .Xc
1304 .Pp
1305 Called by a service dispatch routine that cannot successfully
1306 decode its arguments.
1307 See also
1308 .Fn svc_getargs .
1309 .Pp
1310 .It Xo
1311 .Ft void
1312 .Xc
1313 .It Xo
1314 .Fn svcerr_noproc "SVCXPRT *xprt"
1315 .Xc
1316 .Pp
1317 Called by a service dispatch routine that does not implement
1318 the procedure number that the caller requests.
1319 .Pp
1320 .It Xo
1321 .Ft void
1322 .Xc
1323 .It Xo
1324 .Fn svcerr_noprog "SVCXPRT *xprt"
1325 .Xc
1326 .Pp
1327 Called when the desired program is not registered with the
1328 .Tn RPC
1329 package.
1330 Service implementors usually do not need this routine.
1331 .Pp
1332 .It Xo
1333 .Ft void
1334 .Xc
1335 .It Xo
1336 .Fn svcerr_progvers "SVCXPRT *xprt" "u_long low_vers" "u_long high_vers"
1337 .Xc
1338 .Pp
1339 Called when the desired version of a program is not registered
1340 with the
1341 .Tn RPC
1342 package.
1343 Service implementors usually do not need this routine.
1344 .Pp
1345 .It Xo
1346 .Ft void
1347 .Xc
1348 .It Xo
1349 .Fn svcerr_systemerr "SVCXPRT *xprt"
1350 .Xc
1351 .Pp
1352 Called by a service dispatch routine when it detects a system
1353 error
1354 not covered by any particular protocol.
1355 For example, if a service can no longer allocate storage,
1356 it may call this routine.
1357 .Pp
1358 .It Xo
1359 .Ft void
1360 .Xc
1361 .It Xo
1362 .Fn svcerr_weakauth "SVCXPRT *xprt"
1363 .Xc
1364 .Pp
1365 Called by a service dispatch routine that refuses to perform
1366 a remote procedure call due to insufficient
1367 authentication arguments.
1368 The routine calls
1369 .Fn svcerr_auth xprt AUTH_TOOWEAK .
1370 .Pp
1371 .It Xo
1372 .Ft "SVCXPRT *"
1373 .Xc
1374 .It Xo
1375 .Fn svcraw_create void
1376 .Xc
1377 .Pp
1378 This routine creates a toy
1379 .Tn RPC
1380 service transport, to which it returns a pointer.
1381 The transport
1382 is really a buffer within the process's address space,
1383 so the corresponding
1384 .Tn RPC
1385 client should live in the same
1386 address space;
1387 see
1388 .Fn clntraw_create .
1389 This routine allows simulation of
1390 .Tn RPC
1391 and acquisition of
1392 .Tn RPC
1393 overheads (such as round trip times), without any kernel
1394 interference.
1395 This routine returns
1396 .Dv NULL
1397 if it fails.
1398 .Pp
1399 .It Xo
1400 .Ft "SVCXPRT *"
1401 .Xc
1402 .It Xo
1403 .Fn svctcp_create "int sock" "u_int send_buf_size" "u_int recv_buf_size"
1404 .Xc
1405 .Pp
1406 This routine creates a
1407 .Tn TCP/IP Ns \-based
1408 .Tn RPC
1409 service transport, to which it returns a pointer.
1410 The transport is associated with the socket
1411 .Fa sock ,
1412 which may be
1413 .Dv RPC_ANYSOCK ,
1414 in which case a new socket is created.
1415 If the socket is not bound to a local
1416 .Tn TCP
1417 port, then this routine binds it to an arbitrary port.
1418 Upon completion,
1419 .Fa xprt\->xp_fd
1420 is the transport's socket descriptor, and
1421 .Fa xprt\->xp_port
1422 is the transport's port number.
1423 This routine returns
1424 .Dv NULL
1425 if it fails.
1426 Since
1427 .Tn TCP Ns \-based
1428 .Tn RPC
1429 uses buffered
1430 .Tn I/O ,
1431 users may specify the size of buffers; values of zero
1432 choose suitable defaults.
1433 .Pp
1434 .It Xo
1435 .Ft "SVCXPRT *"
1436 .Xc
1437 .It Xo
1438 .Fn svcunix_create "int sock" "u_int send_buf_size" "u_int recv_buf_size" "char *path"
1439 .Xc
1440 .Pp
1441 This routine creates a
1442 .Ux Ns -based
1443 .Tn RPC
1444 service transport, to which it returns a pointer.
1445 The transport is associated with the socket
1446 .Fa sock ,
1447 which may be
1448 .Dv RPC_ANYSOCK ,
1449 in which case a new socket is created.
1450 The
1451 .Fa *path
1452 argument
1453 is a variable-length file system pathname of
1454 at most 104 characters.
1455 This file is
1456 .Em not
1457 removed when the socket is closed.
1458 The
1459 .Xr unlink 2
1460 system call must be used to remove the file.
1461 Upon completion,
1462 .Fa xprt\->xp_fd
1463 is the transport's socket descriptor.
1464 This routine returns
1465 .Dv NULL
1466 if it fails.
1467 Since
1468 .Ux Ns -based
1469 .Tn RPC
1470 uses buffered
1471 .Tn I/O ,
1472 users may specify the size of buffers; values of zero
1473 choose suitable defaults.
1474 .Pp
1475 .It Xo
1476 .Ft "SVCXPRT *"
1477 .Xc
1478 .It Xo
1479 .Fn svcunixfd_create "int fd" "u_int sendsize" "u_int recvsize"
1480 .Xc
1481 .Pp
1482 Create a service on top of any open descriptor.
1483 The
1484 .Fa sendsize
1485 and
1486 .Fa recvsize
1487 arguments
1488 indicate sizes for the send and receive buffers.
1489 If they are
1490 zero, a reasonable default is chosen.
1491 .Pp
1492 .It Xo
1493 .Ft "SVCXPRT *"
1494 .Xc
1495 .It Xo
1496 .Fn svcfd_create "int fd" "u_int sendsize" "u_int recvsize"
1497 .Xc
1498 .Pp
1499 Create a service on top of any open descriptor.
1500 Typically,
1501 this
1502 descriptor is a connected socket for a stream protocol such
1503 as
1504 .Tn TCP .
1505 The
1506 .Fa sendsize
1507 and
1508 .Fa recvsize
1509 arguments
1510 indicate sizes for the send and receive buffers.
1511 If they are
1512 zero, a reasonable default is chosen.
1513 .Pp
1514 .It Xo
1515 .Ft "SVCXPRT *"
1516 .Xc
1517 .It Xo
1518 .Fn svcudp_bufcreate "int sock" "u_int sendsize" "u_int recvsize"
1519 .Xc
1520 .Pp
1521 This routine creates a
1522 .Tn UDP/IP Ns \-based
1523 .Tn RPC
1524 service transport, to which it returns a pointer.
1525 The transport is associated with the socket
1526 .Fa sock ,
1527 which may be
1528 .Dv RPC_ANYSOCK ,
1529 in which case a new socket is created.
1530 If the socket is not bound to a local
1531 .Tn UDP
1532 port, then this routine binds it to an arbitrary port.
1533 Upon
1534 completion,
1535 .Fa xprt\->xp_fd
1536 is the transport's socket descriptor, and
1537 .Fa xprt\->xp_port
1538 is the transport's port number.
1539 This routine returns
1540 .Dv NULL
1541 if it fails.
1542 .Pp
1543 This allows the user to specify the maximum packet size for sending and
1544 receiving
1545 .Tn UDP Ns \-based
1546 .Tn RPC
1547 messages.
1548 .Pp
1549 .It Xo
1550 .Ft bool_t
1551 .Fn xdr_accepted_reply "XDR *xdrs" "struct accepted_reply *ar"
1552 .Xc
1553 .Pp
1554 Used for encoding
1555 .Tn RPC
1556 reply messages.
1557 This routine is useful for users who
1558 wish to generate
1559 .Tn RPC Ns \-style
1560 messages without using the
1561 .Tn RPC
1562 package.
1563 .Pp
1564 .It Xo
1565 .Ft bool_t
1566 .Fn xdr_authunix_parms "XDR *xdrs" "struct authunix_parms *aupp"
1567 .Xc
1568 .Pp
1569 Used for describing
1570 .Ux
1571 credentials.
1572 This routine is useful for users
1573 who wish to generate these credentials without using the
1574 .Tn RPC
1575 authentication package.
1576 .Pp
1577 .It Xo
1578 .Ft void
1579 .Xc
1580 .It Xo
1581 .Ft bool_t
1582 .Fn xdr_callhdr "XDR *xdrs" "struct rpc_msg *chdr"
1583 .Xc
1584 .Pp
1585 Used for describing
1586 .Tn RPC
1587 call header messages.
1588 This routine is useful for users who wish to generate
1589 .Tn RPC Ns \-style
1590 messages without using the
1591 .Tn RPC
1592 package.
1593 .Pp
1594 .It Xo
1595 .Ft bool_t
1596 .Fn xdr_callmsg "XDR *xdrs" "struct rpc_msg *cmsg"
1597 .Xc
1598 .Pp
1599 Used for describing
1600 .Tn RPC
1601 call messages.
1602 This routine is useful for users who wish to generate
1603 .Tn RPC Ns \-style
1604 messages without using the
1605 .Tn RPC
1606 package.
1607 .Pp
1608 .It Xo
1609 .Ft bool_t
1610 .Fn xdr_opaque_auth "XDR *xdrs" "struct opaque_auth *ap"
1611 .Xc
1612 .Pp
1613 Used for describing
1614 .Tn RPC
1615 authentication information messages.
1616 This routine is useful for users who wish to generate
1617 .Tn RPC Ns \-style
1618 messages without using the
1619 .Tn RPC
1620 package.
1621 .Pp
1622 .It Xo
1623 .Vt struct pmap ;
1624 .Xc
1625 .It Xo
1626 .Ft bool_t
1627 .Fn xdr_pmap "XDR *xdrs" "struct pmap *regs"
1628 .Xc
1629 .Pp
1630 Used for describing arguments to various
1631 .Xr rpcbind 8
1632 procedures, externally.
1633 This routine is useful for users who wish to generate
1634 these arguments without using the
1635 .Fn pmap_*
1636 interface.
1637 .Pp
1638 .It Xo
1639 .Ft bool_t
1640 .Fn xdr_pmaplist "XDR *xdrs" "struct pmaplist **rp"
1641 .Xc
1642 .Pp
1643 Used for describing a list of port mappings, externally.
1644 This routine is useful for users who wish to generate
1645 these arguments without using the
1646 .Fn pmap_*
1647 interface.
1648 .Pp
1649 .It Xo
1650 .Ft bool_t
1651 .Fn xdr_rejected_reply "XDR *xdrs" "struct rejected_reply *rr"
1652 .Xc
1653 .Pp
1654 Used for describing
1655 .Tn RPC
1656 reply messages.
1657 This routine is useful for users who wish to generate
1658 .Tn RPC Ns \-style
1659 messages without using the
1660 .Tn RPC
1661 package.
1662 .Pp
1663 .It Xo
1664 .Ft bool_t
1665 .Fn xdr_replymsg "XDR *xdrs" "struct rpc_msg *rmsg"
1666 .Xc
1667 .Pp
1668 Used for describing
1669 .Tn RPC
1670 reply messages.
1671 This routine is useful for users who wish to generate
1672 .Tn RPC
1673 style messages without using the
1674 .Tn RPC
1675 package.
1676 .Pp
1677 .It Xo
1678 .Ft void
1679 .Xc
1680 .It Xo
1681 .Fn xprt_register "SVCXPRT *xprt"
1682 .Xc
1683 .Pp
1684 After
1685 .Tn RPC
1686 service transport handles are created,
1687 they should register themselves with the
1688 .Tn RPC
1689 service package.
1690 This routine modifies the global variable
1691 .Va svc_fds .
1692 Service implementors usually do not need this routine.
1693 .Pp
1694 .It Xo
1695 .Ft void
1696 .Xc
1697 .It Xo
1698 .Fn xprt_unregister "SVCXPRT *xprt"
1699 .Xc
1700 .Pp
1701 Before an
1702 .Tn RPC
1703 service transport handle is destroyed,
1704 it should unregister itself with the
1705 .Tn RPC
1706 service package.
1707 This routine modifies the global variable
1708 .Va svc_fds .
1709 Service implementors usually do not need this routine.
1710 .El
1711 .Sh SEE ALSO
1712 .Xr rpc_secure 3 ,
1713 .Xr xdr 3
1714 .Rs
1715 .%T "Remote Procedure Calls: Protocol Specification"
1716 .Re
1717 .Rs
1718 .%T "Remote Procedure Call Programming Guide"
1719 .Re
1720 .Rs
1721 .%T "rpcgen Programming Guide"
1722 .Re
1723 .Rs
1724 .%T "RPC: Remote Procedure Call Protocol Specification"
1725 .%O RFC 1050
1726 .%Q "Sun Microsystems, Inc., USC-ISI"
1727 .Re