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