[NETAPI32]
[reactos.git] / reactos / dll / win32 / libtirpc / man / rpc_soc.3t
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 .\"
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 .Bl -tag -width indent -compact
115 .Pp
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" "int uid" "int gid" "int len" "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 Xo
398 .Vt "struct timeval" Ta "set total timeout"
399 .Xc
400 .It Dv CLGET_TIMEOUT Ta Xo
401 .Vt "struct timeval" Ta "get total timeout"
402 .Xc
403 .El
404 .Pp
405 Note: if you set the timeout using
406 .Fn clnt_control ,
407 the timeout argument passed to
408 .Fn clnt_call
409 will be ignored in all future calls.
410 .Bl -column "CLSET_RETRY_TIMEOUT" "struct sockaddr_in"
411 .It Dv CLGET_SERVER_ADDR Ta Xo
412 .Vt "struct sockaddr_in" Ta "get server's address"
413 .Xc
414 .El
415 .Pp
416 The following operations are valid for
417 .Tn UDP
418 only:
419 .Bl -column "CLSET_RETRY_TIMEOUT" "struct sockaddr_in"
420 .It Dv CLSET_RETRY_TIMEOUT Ta Xo
421 .Vt "struct timeval" Ta "set the retry timeout"
422 .Xc
423 .It Dv CLGET_RETRY_TIMEOUT Ta Xo
424 .Vt "struct timeval" Ta "get the retry timeout"
425 .Xc
426 .El
427 .Pp
428 The retry timeout is the time that
429 .Tn "UDP RPC"
430 waits for the server to reply before
431 retransmitting the request.
432 .Pp
433 .It Xo
434 .Ft bool_t
435 .Fn clnt_freeres "CLIENT *clnt" "xdrproc_t outproc" "char *out"
436 .Xc
437 .Pp
438 A macro that frees any data allocated by the
439 .Tn RPC/XDR
440 system when it decoded the results of an
441 .Tn RPC
442 call.
443 The
444 .Fa out
445 argument
446 is the address of the results, and
447 .Fa outproc
448 is the
449 .Tn XDR
450 routine describing the results.
451 This routine returns one if the results were successfully
452 freed,
453 and zero otherwise.
454 .Pp
455 .It Xo
456 .Ft void
457 .Xc
458 .It Xo
459 .Fn clnt_geterr "CLIENT *clnt" "struct rpc_err *errp"
460 .Xc
461 .Pp
462 A macro that copies the error structure out of the client
463 handle
464 to the structure at address
465 .Fa errp .
466 .Pp
467 .It Xo
468 .Ft void
469 .Xc
470 .It Xo
471 .Fn clnt_pcreateerror "char *s"
472 .Xc
473 .Pp
474 prints a message to standard error indicating
475 why a client
476 .Tn RPC
477 handle could not be created.
478 The message is prepended with string
479 .Fa s
480 and a colon.
481 A newline is appended at the end of the message.
482 Used when a
483 .Fn clnt_create ,
484 .Fn clntraw_create ,
485 .Fn clnttcp_create ,
486 or
487 .Fn clntudp_create
488 call fails.
489 .Pp
490 .It Xo
491 .Ft void
492 .Xc
493 .It Xo
494 .Fn clnt_perrno "enum clnt_stat stat"
495 .Xc
496 .Pp
497 Print a message to standard error corresponding
498 to the condition indicated by
499 .Fa stat .
500 A newline is appended at the end of the message.
501 Used after
502 .Fn callrpc .
503 .Pp
504 .It Xo
505 .Ft void
506 .Fn clnt_perror "CLIENT *clnt" "char *s"
507 .Xc
508 .Pp
509 Print a message to standard error indicating why an
510 .Tn RPC
511 call failed;
512 .Fa clnt
513 is the handle used to do the call.
514 The message is prepended with string
515 .Fa s
516 and a colon.
517 A newline is appended at the end of the message.
518 Used after
519 .Fn clnt_call .
520 .Pp
521 .It Xo
522 .Ft "char *"
523 .Xc
524 .It Xo
525 .Fn clnt_spcreateerror "char *s"
526 .Xc
527 .Pp
528 Like
529 .Fn clnt_pcreateerror ,
530 except that it returns a string
531 instead of printing to the standard error.
532 .Pp
533 Bugs: returns pointer to static data that is overwritten
534 on each call.
535 .Pp
536 .It Xo
537 .Ft "char *"
538 .Xc
539 .It Xo
540 .Fn clnt_sperrno "enum clnt_stat stat"
541 .Xc
542 .Pp
543 Take the same arguments as
544 .Fn clnt_perrno ,
545 but instead of sending a message to the standard error
546 indicating why an
547 .Tn RPC
548 call failed, return a pointer to a string which contains
549 the message.
550 .Pp
551 The
552 .Fn clnt_sperrno
553 function
554 is used instead of
555 .Fn clnt_perrno
556 if the program does not have a standard error (as a program
557 running as a server quite likely does not), or if the
558 programmer
559 does not want the message to be output with
560 .Fn printf ,
561 or if a message format different from that supported by
562 .Fn clnt_perrno
563 is to be used.
564 .Pp
565 Note: unlike
566 .Fn clnt_sperror
567 and
568 .Fn clnt_spcreateerror ,
569 .Fn clnt_sperrno
570 returns pointer to static data, but the
571 result will not get overwritten on each call.
572 .Pp
573 .It Xo
574 .Ft "char *"
575 .Xc
576 .It Xo
577 .Fn clnt_sperror "CLIENT *rpch" "char *s"
578 .Xc
579 .Pp
580 Like
581 .Fn clnt_perror ,
582 except that (like
583 .Fn clnt_sperrno )
584 it returns a string instead of printing to standard error.
585 .Pp
586 Bugs: returns pointer to static data that is overwritten
587 on each call.
588 .Pp
589 .It Xo
590 .Ft "CLIENT *"
591 .Xc
592 .It Xo
593 .Fn clntraw_create "u_long prognum" "u_long versnum"
594 .Xc
595 .Pp
596 This routine creates a toy
597 .Tn RPC
598 client for the remote program
599 .Fa prognum ,
600 version
601 .Fa versnum .
602 The transport used to pass messages to the service is
603 actually a buffer within the process's address space, so the
604 corresponding
605 .Tn RPC
606 server should live in the same address space; see
607 .Fn svcraw_create .
608 This allows simulation of
609 .Tn RPC
610 and acquisition of
611 .Tn RPC
612 overheads, such as round trip times, without any
613 kernel interference.
614 This routine returns
615 .Dv NULL
616 if it fails.
617 .Pp
618 .It Xo
619 .Ft "CLIENT *"
620 .Xc
621 .It Xo
622 .Fo clnttcp_create
623 .Fa "struct sockaddr_in *addr"
624 .Fa "u_long prognum"
625 .Fa "u_long versnum"
626 .Fa "int *sockp"
627 .Fa "u_int sendsz"
628 .Fa "u_int recvsz"
629 .Fc
630 .Xc
631 .Pp
632 This routine creates an
633 .Tn RPC
634 client for the remote program
635 .Fa prognum ,
636 version
637 .Fa versnum ;
638 the client uses
639 .Tn TCP/IP
640 as a transport.
641 The remote program is located at Internet
642 address
643 .Fa addr .
644 If
645 .Fa addr\->sin_port
646 is zero, then it is set to the actual port that the remote
647 program is listening on (the remote
648 .Xr rpcbind 8
649 service is consulted for this information).
650 The
651 .Fa sockp
652 argument
653 is a socket; if it is
654 .Dv RPC_ANYSOCK ,
655 then this routine opens a new one and sets
656 .Fa sockp .
657 Since
658 .Tn TCP Ns \-based
659 .Tn RPC
660 uses buffered
661 .Tn I/O ,
662 the user may specify the size of the send and receive buffers
663 with the
664 .Fa sendsz
665 and
666 .Fa recvsz
667 arguments;
668 values of zero choose suitable defaults.
669 This routine returns
670 .Dv NULL
671 if it fails.
672 .Pp
673 .It Xo
674 .Ft "CLIENT *"
675 .Xc
676 .It Xo
677 .Fo clntudp_create
678 .Fa "struct sockaddr_in *addr"
679 .Fa "u_long prognum"
680 .Fa "u_long versnum"
681 .Fa "struct timeval wait"
682 .Fa "int *sockp"
683 .Fc
684 .Xc
685 .Pp
686 This routine creates an
687 .Tn RPC
688 client for the remote program
689 .Fa prognum ,
690 version
691 .Fa versnum ;
692 the client uses
693 .Tn UDP/IP
694 as a transport.
695 The remote program is located at Internet
696 address
697 .Fa addr .
698 If
699 .Fa addr\->sin_port
700 is zero, then it is set to actual port that the remote
701 program is listening on (the remote
702 .Xr rpcbind 8
703 service is consulted for this information).
704 The
705 .Fa sockp
706 argument
707 is a socket; if it is
708 .Dv RPC_ANYSOCK ,
709 then this routine opens a new one and sets
710 .Fa sockp .
711 The
712 .Tn UDP
713 transport resends the call message in intervals of
714 .Fa wait
715 time until a response is received or until the call times
716 out.
717 The total time for the call to time out is specified by
718 .Fn clnt_call .
719 .Pp
720 Warning: since
721 .Tn UDP Ns \-based
722 .Tn RPC
723 messages can only hold up to 8 Kbytes
724 of encoded data, this transport cannot be used for procedures
725 that take large arguments or return huge results.
726 .Pp
727 .It Xo
728 .Ft "CLIENT *"
729 .Xc
730 .It Xo
731 .Fo clntudp_bufcreate
732 .Fa "struct sockaddr_in *addr"
733 .Fa "u_long prognum"
734 .Fa "u_long versnum"
735 .Fa "struct timeval wait"
736 .Fa "int *sockp"
737 .Fa "unsigned int sendsize"
738 .Fa "unsigned int recosize"
739 .Fc
740 .Xc
741 .Pp
742 This routine creates an
743 .Tn RPC
744 client for the remote program
745 .Fa prognum ,
746 on
747 .Fa versnum ;
748 the client uses
749 .Tn UDP/IP
750 as a transport.
751 The remote program is located at Internet
752 address
753 .Fa addr .
754 If
755 .Fa addr\->sin_port
756 is zero, then it is set to actual port that the remote
757 program is listening on (the remote
758 .Xr rpcbind 8
759 service is consulted for this information).
760 The
761 .Fa sockp
762 argument
763 is a socket; if it is
764 .Dv RPC_ANYSOCK ,
765 then this routine opens a new one and sets
766 .Fa sockp .
767 The
768 .Tn UDP
769 transport resends the call message in intervals of
770 .Fa wait
771 time until a response is received or until the call times
772 out.
773 The total time for the call to time out is specified by
774 .Fn clnt_call .
775 .Pp
776 This allows the user to specify the maximum packet size
777 for sending and receiving
778 .Tn UDP Ns \-based
779 .Tn RPC
780 messages.
781 .Pp
782 .It Xo
783 .Ft "CLIENT *"
784 .Xc
785 .It Xo
786 .Fo clntunix_create
787 .Fa "struct sockaddr_un *raddr"
788 .Fa "u_long prognum"
789 .Fa "u_long versnum"
790 .Fa "int *sockp"
791 .Fa "u_int sendsz"
792 .Fa "u_int recvsz"
793 .Fc
794 .Xc
795 .Pp
796 This routine creates an
797 .Tn RPC
798 client for the local
799 program
800 .Fa prognum ,
801 version
802 .Fa versnum ;
803 the client uses
804 .Ux Ns -domain
805 sockets as a transport.
806 The local program is located at the
807 .Fa *raddr .
808 The
809 .Fa sockp
810 argument
811 is a socket; if it is
812 .Dv RPC_ANYSOCK ,
813 then this routine opens a new one and sets
814 .Fa sockp .
815 Since
816 .Ux Ns -based
817 .Tn RPC
818 uses buffered
819 .Tn I/O ,
820 the user may specify the size of the send and receive buffers
821 with the
822 .Fa sendsz
823 and
824 .Fa recvsz
825 arguments;
826 values of zero choose suitable defaults.
827 This routine returns
828 .Dv NULL
829 if it fails.
830 .Pp
831 .It Xo
832 .Ft int
833 .Xc
834 .It Xo
835 .Fn get_myaddress "struct sockaddr_in *addr"
836 .Xc
837 .Pp
838 Stuff the machine's
839 .Tn IP
840 address into
841 .Fa addr ,
842 without consulting the library routines that deal with
843 .Pa /etc/hosts .
844 The port number is always set to
845 .Fn htons PMAPPORT .
846 Returns zero on success, non-zero on failure.
847 .Pp
848 .It Xo
849 .Ft "struct pmaplist *"
850 .Xc
851 .It Xo
852 .Fn pmap_getmaps "struct sockaddr_in *addr"
853 .Xc
854 .Pp
855 A user interface to the
856 .Xr rpcbind 8
857 service, which returns a list of the current
858 .Tn RPC
859 program\-to\-port mappings
860 on the host located at
861 .Tn IP
862 address
863 .Fa addr .
864 This routine can return
865 .Dv NULL .
866 The command
867 .Dq Nm rpcinfo Fl p
868 uses this routine.
869 .Pp
870 .It Xo
871 .Ft u_short
872 .Xc
873 .It Xo
874 .Fo pmap_getport
875 .Fa "struct sockaddr_in *addr"
876 .Fa "u_long prognum"
877 .Fa "u_long versnum"
878 .Fa "u_long protocol"
879 .Fc
880 .Xc
881 .Pp
882 A user interface to the
883 .Xr rpcbind 8
884 service, which returns the port number
885 on which waits a service that supports program number
886 .Fa prognum ,
887 version
888 .Fa versnum ,
889 and speaks the transport protocol associated with
890 .Fa protocol .
891 The value of
892 .Fa protocol
893 is most likely
894 .Dv IPPROTO_UDP
895 or
896 .Dv IPPROTO_TCP .
897 A return value of zero means that the mapping does not exist
898 or that
899 the
900 .Tn RPC
901 system failed to contact the remote
902 .Xr rpcbind 8
903 service.
904 In the latter case, the global variable
905 .Va rpc_createerr
906 contains the
907 .Tn RPC
908 status.
909 .Pp
910 .It Xo
911 .Ft "enum clnt_stat"
912 .Xc
913 .It Xo
914 .Fo pmap_rmtcall
915 .Fa "struct sockaddr_in *addr"
916 .Fa "u_long prognum"
917 .Fa "u_long versnum"
918 .Fa "u_long procnum"
919 .Fa "xdrproc_t inproc"
920 .Fa "char *in"
921 .Fa "xdrproc_t outproc"
922 .Fa "char *out"
923 .Fa "struct timeval tout"
924 .Fa "u_long *portp"
925 .Fc
926 .Xc
927 .Pp
928 A user interface to the
929 .Xr rpcbind 8
930 service, which instructs
931 .Xr rpcbind 8
932 on the host at
933 .Tn IP
934 address
935 .Fa addr
936 to make an
937 .Tn RPC
938 call on your behalf to a procedure on that host.
939 The
940 .Fa portp
941 argument
942 will be modified to the program's port number if the
943 procedure
944 succeeds.
945 The definitions of other arguments are discussed
946 in
947 .Fn callrpc
948 and
949 .Fn clnt_call .
950 This procedure should be used for a
951 .Dq ping
952 and nothing
953 else.
954 See also
955 .Fn clnt_broadcast .
956 .Pp
957 .It Xo
958 .Ft bool_t
959 .Fn pmap_set "u_long prognum" "u_long versnum" "u_long protocol" "u_short port"
960 .Xc
961 .Pp
962 A user interface to the
963 .Xr rpcbind 8
964 service, which establishes a mapping between the triple
965 .Pq Fa prognum , versnum , protocol
966 and
967 .Fa port
968 on the machine's
969 .Xr rpcbind 8
970 service.
971 The value of
972 .Fa protocol
973 is most likely
974 .Dv IPPROTO_UDP
975 or
976 .Dv IPPROTO_TCP .
977 This routine returns one if it succeeds, zero otherwise.
978 Automatically done by
979 .Fn svc_register .
980 .Pp
981 .It Xo
982 .Ft bool_t
983 .Fn pmap_unset "u_long prognum" "u_long versnum"
984 .Xc
985 .Pp
986 A user interface to the
987 .Xr rpcbind 8
988 service, which destroys all mapping between the triple
989 .Pq Fa prognum , versnum , *
990 and
991 .Fa ports
992 on the machine's
993 .Xr rpcbind 8
994 service.
995 This routine returns one if it succeeds, zero
996 otherwise.
997 .Pp
998 .It Xo
999 .Ft bool_t
1000 .Fo registerrpc
1001 .Fa "u_long prognum"
1002 .Fa "u_long versnum"
1003 .Fa "u_long procnum"
1004 .Fa "char *(*procname)(void)"
1005 .Fa "xdrproc_t inproc"
1006 .Fa "xdrproc_t outproc"
1007 .Fc
1008 .Xc
1009 .Pp
1010 Register procedure
1011 .Fa procname
1012 with the
1013 .Tn RPC
1014 service package.
1015 If a request arrives for program
1016 .Fa prognum ,
1017 version
1018 .Fa versnum ,
1019 and procedure
1020 .Fa procnum ,
1021 .Fa procname
1022 is called with a pointer to its argument(s);
1023 .Fa progname
1024 should return a pointer to its static result(s);
1025 .Fa inproc
1026 is used to decode the arguments while
1027 .Fa outproc
1028 is used to encode the results.
1029 This routine returns zero if the registration succeeded, \-1
1030 otherwise.
1031 .Pp
1032 Warning: remote procedures registered in this form
1033 are accessed using the
1034 .Tn UDP/IP
1035 transport; see
1036 .Fn svcudp_create
1037 for restrictions.
1038 .Pp
1039 .It Xo
1040 .Vt "struct rpc_createerr" rpc_createerr ;
1041 .Xc
1042 .Pp
1043 A global variable whose value is set by any
1044 .Tn RPC
1045 client creation routine
1046 that does not succeed.
1047 Use the routine
1048 .Fn clnt_pcreateerror
1049 to print the reason why.
1050 .Pp
1051 .It Xo
1052 .Ft bool_t
1053 .Fn svc_destroy "SVCXPRT * xprt"
1054 .Xc
1055 .Pp
1056 A macro that destroys the
1057 .Tn RPC
1058 service transport handle,
1059 .Fa xprt .
1060 Destruction usually involves deallocation
1061 of private data structures, including
1062 .Fa xprt
1063 itself.
1064 Use of
1065 .Fa xprt
1066 is undefined after calling this routine.
1067 .Pp
1068 .It Xo
1069 .Vt fd_set svc_fdset ;
1070 .Xc
1071 .Pp
1072 A global variable reflecting the
1073 .Tn RPC
1074 service side's
1075 read file descriptor bit mask; it is suitable as a template argument
1076 to the
1077 .Xr select 2
1078 system call.
1079 This is only of interest
1080 if a service implementor does not call
1081 .Fn svc_run ,
1082 but rather does his own asynchronous event processing.
1083 This variable is read\-only (do not pass its address to
1084 .Xr select 2 ! ) ,
1085 yet it may change after calls to
1086 .Fn svc_getreqset
1087 or any creation routines.
1088 As well, note that if the process has descriptor limits
1089 which are extended beyond
1090 .Dv FD_SETSIZE ,
1091 this variable will only be usable for the first
1092 .Dv FD_SETSIZE
1093 descriptors.
1094 .Pp
1095 .It Xo
1096 .Vt int svc_fds ;
1097 .Xc
1098 .Pp
1099 Similar to
1100 .Va svc_fdset ,
1101 but limited to 32 descriptors.
1102 This
1103 interface is obsoleted by
1104 .Va svc_fdset .
1105 .Pp
1106 .It Xo
1107 .Ft bool_t
1108 .Fn svc_freeargs "SVCXPRT *xprt" "xdrproc_t inproc" "char *in"
1109 .Xc
1110 .Pp
1111 A macro that frees any data allocated by the
1112 .Tn RPC/XDR
1113 system when it decoded the arguments to a service procedure
1114 using
1115 .Fn svc_getargs .
1116 This routine returns 1 if the results were successfully
1117 freed,
1118 and zero otherwise.
1119 .Pp
1120 .It Xo
1121 .Ft bool_t
1122 .Fn svc_getargs "SVCXPRT *xprt" "xdrproc_t inproc" "char *in"
1123 .Xc
1124 .Pp
1125 A macro that decodes the arguments of an
1126 .Tn RPC
1127 request
1128 associated with the
1129 .Tn RPC
1130 service transport handle,
1131 .Fa xprt .
1132 The
1133 .Fa in
1134 argument
1135 is the address where the arguments will be placed;
1136 .Fa inproc
1137 is the
1138 .Tn XDR
1139 routine used to decode the arguments.
1140 This routine returns one if decoding succeeds, and zero
1141 otherwise.
1142 .Pp
1143 .It Xo
1144 .Ft "struct sockaddr_in *"
1145 .Xc
1146 .It Xo
1147 .Fn svc_getcaller "SVCXPRT *xprt"
1148 .Xc
1149 .Pp
1150 The approved way of getting the network address of the caller
1151 of a procedure associated with the
1152 .Tn RPC
1153 service transport handle,
1154 .Fa xprt .
1155 .Pp
1156 .It Xo
1157 .Ft void
1158 .Fn svc_getreqset "fd_set *rdfds"
1159 .Xc
1160 .Pp
1161 This routine is only of interest if a service implementor
1162 does not call
1163 .Fn svc_run ,
1164 but instead implements custom asynchronous event processing.
1165 It is called when the
1166 .Xr select 2
1167 system call has determined that an
1168 .Tn RPC
1169 request has arrived on some
1170 .Tn RPC
1171 socket(s);
1172 .Fa rdfds
1173 is the resultant read file descriptor bit mask.
1174 The routine returns when all sockets associated with the
1175 value of
1176 .Fa rdfds
1177 have been serviced.
1178 .Pp
1179 .It Xo
1180 .Ft void
1181 .Fn svc_getreq "int rdfds"
1182 .Xc
1183 .Pp
1184 Similar to
1185 .Fn svc_getreqset ,
1186 but limited to 32 descriptors.
1187 This interface is obsoleted by
1188 .Fn svc_getreqset .
1189 .Pp
1190 .It Xo
1191 .Ft bool_t
1192 .Fo svc_register
1193 .Fa "SVCXPRT *xprt"
1194 .Fa "u_long prognum"
1195 .Fa "u_long versnum"
1196 .Fa "void (*dispatch)(struct svc_req *, SVCXPRT *)"
1197 .Fa "int protocol"
1198 .Fc
1199 .Xc
1200 .Pp
1201 Associates
1202 .Fa prognum
1203 and
1204 .Fa versnum
1205 with the service dispatch procedure,
1206 .Fn dispatch .
1207 If
1208 .Fa protocol
1209 is zero, the service is not registered with the
1210 .Xr rpcbind 8
1211 service.
1212 If
1213 .Fa protocol
1214 is non-zero, then a mapping of the triple
1215 .Pq Fa prognum , versnum , protocol
1216 to
1217 .Fa xprt\->xp_port
1218 is established with the local
1219 .Xr rpcbind 8
1220 service (generally
1221 .Fa protocol
1222 is zero,
1223 .Dv IPPROTO_UDP
1224 or
1225 .Dv IPPROTO_TCP ) .
1226 The procedure
1227 .Fn dispatch
1228 has the following form:
1229 .Bd -ragged -offset indent
1230 .Ft bool_t
1231 .Fn dispatch "struct svc_req *request" "SVCXPRT *xprt"
1232 .Ed
1233 .Pp
1234 The
1235 .Fn svc_register
1236 routine returns one if it succeeds, and zero otherwise.
1237 .Pp
1238 .It Xo
1239 .Fn svc_run
1240 .Xc
1241 .Pp
1242 This routine never returns.
1243 It waits for
1244 .Tn RPC
1245 requests to arrive, and calls the appropriate service
1246 procedure using
1247 .Fn svc_getreq
1248 when one arrives.
1249 This procedure is usually waiting for a
1250 .Xr select 2
1251 system call to return.
1252 .Pp
1253 .It Xo
1254 .Ft bool_t
1255 .Fn svc_sendreply "SVCXPRT *xprt" "xdrproc_t outproc" "char *out"
1256 .Xc
1257 .Pp
1258 Called by an
1259 .Tn RPC
1260 service's dispatch routine to send the results of a
1261 remote procedure call.
1262 The
1263 .Fa xprt
1264 argument
1265 is the request's associated transport handle;
1266 .Fa outproc
1267 is the
1268 .Tn XDR
1269 routine which is used to encode the results; and
1270 .Fa out
1271 is the address of the results.
1272 This routine returns one if it succeeds, zero otherwise.
1273 .Pp
1274 .It Xo
1275 .Ft void
1276 .Xc
1277 .It Xo
1278 .Fn svc_unregister "u_long prognum" "u_long versnum"
1279 .Xc
1280 .Pp
1281 Remove all mapping of the double
1282 .Pq Fa prognum , versnum
1283 to dispatch routines, and of the triple
1284 .Pq Fa prognum , versnum , *
1285 to port number.
1286 .Pp
1287 .It Xo
1288 .Ft void
1289 .Xc
1290 .It Xo
1291 .Fn svcerr_auth "SVCXPRT *xprt" "enum auth_stat why"
1292 .Xc
1293 .Pp
1294 Called by a service dispatch routine that refuses to perform
1295 a remote procedure call due to an authentication error.
1296 .Pp
1297 .It Xo
1298 .Ft void
1299 .Xc
1300 .It Xo
1301 .Fn svcerr_decode "SVCXPRT *xprt"
1302 .Xc
1303 .Pp
1304 Called by a service dispatch routine that cannot successfully
1305 decode its arguments.
1306 See also
1307 .Fn svc_getargs .
1308 .Pp
1309 .It Xo
1310 .Ft void
1311 .Xc
1312 .It Xo
1313 .Fn svcerr_noproc "SVCXPRT *xprt"
1314 .Xc
1315 .Pp
1316 Called by a service dispatch routine that does not implement
1317 the procedure number that the caller requests.
1318 .Pp
1319 .It Xo
1320 .Ft void
1321 .Xc
1322 .It Xo
1323 .Fn svcerr_noprog "SVCXPRT *xprt"
1324 .Xc
1325 .Pp
1326 Called when the desired program is not registered with the
1327 .Tn RPC
1328 package.
1329 Service implementors usually do not need this routine.
1330 .Pp
1331 .It Xo
1332 .Ft void
1333 .Xc
1334 .It Xo
1335 .Fn svcerr_progvers "SVCXPRT *xprt" "u_long low_vers" "u_long high_vers"
1336 .Xc
1337 .Pp
1338 Called when the desired version of a program is not registered
1339 with the
1340 .Tn RPC
1341 package.
1342 Service implementors usually do not need this routine.
1343 .Pp
1344 .It Xo
1345 .Ft void
1346 .Xc
1347 .It Xo
1348 .Fn svcerr_systemerr "SVCXPRT *xprt"
1349 .Xc
1350 .Pp
1351 Called by a service dispatch routine when it detects a system
1352 error
1353 not covered by any particular protocol.
1354 For example, if a service can no longer allocate storage,
1355 it may call this routine.
1356 .Pp
1357 .It Xo
1358 .Ft void
1359 .Xc
1360 .It Xo
1361 .Fn svcerr_weakauth "SVCXPRT *xprt"
1362 .Xc
1363 .Pp
1364 Called by a service dispatch routine that refuses to perform
1365 a remote procedure call due to insufficient
1366 authentication arguments.
1367 The routine calls
1368 .Fn svcerr_auth xprt AUTH_TOOWEAK .
1369 .Pp
1370 .It Xo
1371 .Ft "SVCXPRT *"
1372 .Xc
1373 .It Xo
1374 .Fn svcraw_create void
1375 .Xc
1376 .Pp
1377 This routine creates a toy
1378 .Tn RPC
1379 service transport, to which it returns a pointer.
1380 The transport
1381 is really a buffer within the process's address space,
1382 so the corresponding
1383 .Tn RPC
1384 client should live in the same
1385 address space;
1386 see
1387 .Fn clntraw_create .
1388 This routine allows simulation of
1389 .Tn RPC
1390 and acquisition of
1391 .Tn RPC
1392 overheads (such as round trip times), without any kernel
1393 interference.
1394 This routine returns
1395 .Dv NULL
1396 if it fails.
1397 .Pp
1398 .It Xo
1399 .Ft "SVCXPRT *"
1400 .Xc
1401 .It Xo
1402 .Fn svctcp_create "int sock" "u_int send_buf_size" "u_int recv_buf_size"
1403 .Xc
1404 .Pp
1405 This routine creates a
1406 .Tn TCP/IP Ns \-based
1407 .Tn RPC
1408 service transport, to which it returns a pointer.
1409 The transport is associated with the socket
1410 .Fa sock ,
1411 which may be
1412 .Dv RPC_ANYSOCK ,
1413 in which case a new socket is created.
1414 If the socket is not bound to a local
1415 .Tn TCP
1416 port, then this routine binds it to an arbitrary port.
1417 Upon completion,
1418 .Fa xprt\->xp_fd
1419 is the transport's socket descriptor, and
1420 .Fa xprt\->xp_port
1421 is the transport's port number.
1422 This routine returns
1423 .Dv NULL
1424 if it fails.
1425 Since
1426 .Tn TCP Ns \-based
1427 .Tn RPC
1428 uses buffered
1429 .Tn I/O ,
1430 users may specify the size of buffers; values of zero
1431 choose suitable defaults.
1432 .Pp
1433 .It Xo
1434 .Ft "SVCXPRT *"
1435 .Xc
1436 .It Xo
1437 .Fn svcunix_create "int sock" "u_int send_buf_size" "u_int recv_buf_size" "char *path"
1438 .Xc
1439 .Pp
1440 This routine creates a
1441 .Ux Ns -based
1442 .Tn RPC
1443 service transport, to which it returns a pointer.
1444 The transport is associated with the socket
1445 .Fa sock ,
1446 which may be
1447 .Dv RPC_ANYSOCK ,
1448 in which case a new socket is created.
1449 The
1450 .Fa *path
1451 argument
1452 is a variable-length file system pathname of
1453 at most 104 characters.
1454 This file is
1455 .Em not
1456 removed when the socket is closed.
1457 The
1458 .Xr unlink 2
1459 system call must be used to remove the file.
1460 Upon completion,
1461 .Fa xprt\->xp_fd
1462 is the transport's socket descriptor.
1463 This routine returns
1464 .Dv NULL
1465 if it fails.
1466 Since
1467 .Ux Ns -based
1468 .Tn RPC
1469 uses buffered
1470 .Tn I/O ,
1471 users may specify the size of buffers; values of zero
1472 choose suitable defaults.
1473 .Pp
1474 .It Xo
1475 .Ft "SVCXPRT *"
1476 .Xc
1477 .It Xo
1478 .Fn svcunixfd_create "int fd" "u_int sendsize" "u_int recvsize"
1479 .Xc
1480 .Pp
1481 Create a service on top of any open descriptor.
1482 The
1483 .Fa sendsize
1484 and
1485 .Fa recvsize
1486 arguments
1487 indicate sizes for the send and receive buffers.
1488 If they are
1489 zero, a reasonable default is chosen.
1490 .Pp
1491 .It Xo
1492 .Ft "SVCXPRT *"
1493 .Xc
1494 .It Xo
1495 .Fn svcfd_create "int fd" "u_int sendsize" "u_int recvsize"
1496 .Xc
1497 .Pp
1498 Create a service on top of any open descriptor.
1499 Typically,
1500 this
1501 descriptor is a connected socket for a stream protocol such
1502 as
1503 .Tn TCP .
1504 The
1505 .Fa sendsize
1506 and
1507 .Fa recvsize
1508 arguments
1509 indicate sizes for the send and receive buffers.
1510 If they are
1511 zero, a reasonable default is chosen.
1512 .Pp
1513 .It Xo
1514 .Ft "SVCXPRT *"
1515 .Xc
1516 .It Xo
1517 .Fn svcudp_bufcreate "int sock" "u_int sendsize" "u_int recvsize"
1518 .Xc
1519 .Pp
1520 This routine creates a
1521 .Tn UDP/IP Ns \-based
1522 .Tn RPC
1523 service transport, to which it returns a pointer.
1524 The transport is associated with the socket
1525 .Fa sock ,
1526 which may be
1527 .Dv RPC_ANYSOCK ,
1528 in which case a new socket is created.
1529 If the socket is not bound to a local
1530 .Tn UDP
1531 port, then this routine binds it to an arbitrary port.
1532 Upon
1533 completion,
1534 .Fa xprt\->xp_fd
1535 is the transport's socket descriptor, and
1536 .Fa xprt\->xp_port
1537 is the transport's port number.
1538 This routine returns
1539 .Dv NULL
1540 if it fails.
1541 .Pp
1542 This allows the user to specify the maximum packet size for sending and
1543 receiving
1544 .Tn UDP Ns \-based
1545 .Tn RPC
1546 messages.
1547 .Pp
1548 .It Xo
1549 .Ft bool_t
1550 .Fn xdr_accepted_reply "XDR *xdrs" "struct accepted_reply *ar"
1551 .Xc
1552 .Pp
1553 Used for encoding
1554 .Tn RPC
1555 reply messages.
1556 This routine is useful for users who
1557 wish to generate
1558 .Tn RPC Ns \-style
1559 messages without using the
1560 .Tn RPC
1561 package.
1562 .Pp
1563 .It Xo
1564 .Ft bool_t
1565 .Fn xdr_authunix_parms "XDR *xdrs" "struct authunix_parms *aupp"
1566 .Xc
1567 .Pp
1568 Used for describing
1569 .Ux
1570 credentials.
1571 This routine is useful for users
1572 who wish to generate these credentials without using the
1573 .Tn RPC
1574 authentication package.
1575 .Pp
1576 .It Xo
1577 .Ft void
1578 .Xc
1579 .It Xo
1580 .Ft bool_t
1581 .Fn xdr_callhdr "XDR *xdrs" "struct rpc_msg *chdr"
1582 .Xc
1583 .Pp
1584 Used for describing
1585 .Tn RPC
1586 call header messages.
1587 This routine is useful for users who wish to generate
1588 .Tn RPC Ns \-style
1589 messages without using the
1590 .Tn RPC
1591 package.
1592 .Pp
1593 .It Xo
1594 .Ft bool_t
1595 .Fn xdr_callmsg "XDR *xdrs" "struct rpc_msg *cmsg"
1596 .Xc
1597 .Pp
1598 Used for describing
1599 .Tn RPC
1600 call messages.
1601 This routine is useful for users who wish to generate
1602 .Tn RPC Ns \-style
1603 messages without using the
1604 .Tn RPC
1605 package.
1606 .Pp
1607 .It Xo
1608 .Ft bool_t
1609 .Fn xdr_opaque_auth "XDR *xdrs" "struct opaque_auth *ap"
1610 .Xc
1611 .Pp
1612 Used for describing
1613 .Tn RPC
1614 authentication information messages.
1615 This routine is useful for users who wish to generate
1616 .Tn RPC Ns \-style
1617 messages without using the
1618 .Tn RPC
1619 package.
1620 .Pp
1621 .It Xo
1622 .Vt struct pmap ;
1623 .Xc
1624 .It Xo
1625 .Ft bool_t
1626 .Fn xdr_pmap "XDR *xdrs" "struct pmap *regs"
1627 .Xc
1628 .Pp
1629 Used for describing arguments to various
1630 .Xr rpcbind 8
1631 procedures, externally.
1632 This routine is useful for users who wish to generate
1633 these arguments without using the
1634 .Fn pmap_*
1635 interface.
1636 .Pp
1637 .It Xo
1638 .Ft bool_t
1639 .Fn xdr_pmaplist "XDR *xdrs" "struct pmaplist **rp"
1640 .Xc
1641 .Pp
1642 Used for describing a list of port mappings, externally.
1643 This routine is useful for users who wish to generate
1644 these arguments without using the
1645 .Fn pmap_*
1646 interface.
1647 .Pp
1648 .It Xo
1649 .Ft bool_t
1650 .Fn xdr_rejected_reply "XDR *xdrs" "struct rejected_reply *rr"
1651 .Xc
1652 .Pp
1653 Used for describing
1654 .Tn RPC
1655 reply messages.
1656 This routine is useful for users who wish to generate
1657 .Tn RPC Ns \-style
1658 messages without using the
1659 .Tn RPC
1660 package.
1661 .Pp
1662 .It Xo
1663 .Ft bool_t
1664 .Fn xdr_replymsg "XDR *xdrs" "struct rpc_msg *rmsg"
1665 .Xc
1666 .Pp
1667 Used for describing
1668 .Tn RPC
1669 reply messages.
1670 This routine is useful for users who wish to generate
1671 .Tn RPC
1672 style messages without using the
1673 .Tn RPC
1674 package.
1675 .Pp
1676 .It Xo
1677 .Ft void
1678 .Xc
1679 .It Xo
1680 .Fn xprt_register "SVCXPRT *xprt"
1681 .Xc
1682 .Pp
1683 After
1684 .Tn RPC
1685 service transport handles are created,
1686 they should register themselves with the
1687 .Tn RPC
1688 service package.
1689 This routine modifies the global variable
1690 .Va svc_fds .
1691 Service implementors usually do not need this routine.
1692 .Pp
1693 .It Xo
1694 .Ft void
1695 .Xc
1696 .It Xo
1697 .Fn xprt_unregister "SVCXPRT *xprt"
1698 .Xc
1699 .Pp
1700 Before an
1701 .Tn RPC
1702 service transport handle is destroyed,
1703 it should unregister itself with the
1704 .Tn RPC
1705 service package.
1706 This routine modifies the global variable
1707 .Va svc_fds .
1708 Service implementors usually do not need this routine.
1709 .El
1710 .Sh SEE ALSO
1711 .Xr rpc_secure 3 ,
1712 .Xr xdr 3
1713 .Rs
1714 .%T "Remote Procedure Calls: Protocol Specification"
1715 .Re
1716 .Rs
1717 .%T "Remote Procedure Call Programming Guide"
1718 .Re
1719 .Rs
1720 .%T "rpcgen Programming Guide"
1721 .Re
1722 .Rs
1723 .%T "RPC: Remote Procedure Call Protocol Specification"
1724 .%O RFC1050
1725 .%Q "Sun Microsystems, Inc., USC-ISI"
1726 .Re