xref: /freebsd/lib/libc/rpc/rpc_clnt_calls.3 (revision 8360efbd6c932013ffdb2f83d2f2de4278febb5e)
18360efbdSAlfred Perlstein.\" @(#)rpc_clnt_calls.3n 1.30 93/08/31 SMI; from SVr4
28360efbdSAlfred Perlstein.\" Copyright 1989 AT&T
38360efbdSAlfred Perlstein.\" @(#)rpc_clnt_calls 1.4 89/07/20 SMI;
48360efbdSAlfred Perlstein.\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved.
58360efbdSAlfred Perlstein.\"	$FreeBSD$
68360efbdSAlfred Perlstein.Dd May 7, 1993
78360efbdSAlfred Perlstein.Dt RPC_CLNT_CALLS 3
88360efbdSAlfred Perlstein.Os
98360efbdSAlfred Perlstein.Sh NAME
108360efbdSAlfred Perlstein.Nm rpc_clnt_calls ,
118360efbdSAlfred Perlstein.Nm clnt_call ,
128360efbdSAlfred Perlstein.Nm clnt_freeres ,
138360efbdSAlfred Perlstein.Nm clnt_geterr ,
148360efbdSAlfred Perlstein.Nm clnt_perrno ,
158360efbdSAlfred Perlstein.Nm clnt_perror ,
168360efbdSAlfred Perlstein.Nm clnt_sperrno ,
178360efbdSAlfred Perlstein.Nm clnt_sperror ,
188360efbdSAlfred Perlstein.Nm rpc_broadcast ,
198360efbdSAlfred Perlstein.Nm rpc_broadcast_exp ,
208360efbdSAlfred Perlstein.Nm rpc_call
218360efbdSAlfred Perlstein.Nd library routines for client side calls
228360efbdSAlfred Perlstein.Sh LIBRARY
238360efbdSAlfred Perlstein.Lb libc
248360efbdSAlfred Perlstein.Sh SYNOPSIS
258360efbdSAlfred Perlstein.Fd #include <rpc/rpc.h>
268360efbdSAlfred Perlstein.Ft "enum clnt_stat"
278360efbdSAlfred Perlstein.Fn clnt_call "CLIENT *clnt" "const rpcproc_t procnum" "const xdrproc_t inproc" "const caddr_t in" "const xdrproc_t outproc" "caddr_t out" "const struct timeval tout"
288360efbdSAlfred Perlstein.Ft bool_t
298360efbdSAlfred Perlstein.Fn clnt_freeres "CLIENT *clnt" "const xdrproc_t outproc" "caddr_t out"
308360efbdSAlfred Perlstein.Ft void
318360efbdSAlfred Perlstein.Fn clnt_geterr "const CLIENT * clnt" "struct rpc_err * errp"
328360efbdSAlfred Perlstein.Ft void
338360efbdSAlfred Perlstein.Fn clnt_perrno "const enum clnt_stat stat"
348360efbdSAlfred Perlstein.Ft void
358360efbdSAlfred Perlstein.Fn clnt_perror "const CLIENT * clnt" "const char *s"
368360efbdSAlfred Perlstein.Ft "char *"
378360efbdSAlfred Perlstein.Fn clnt_sperrno "const enum clnt_stat stat"
388360efbdSAlfred Perlstein.Ft "char *"
398360efbdSAlfred Perlstein.Fn clnt_sperror "const CLIENT *clnt" "const char * s"
408360efbdSAlfred Perlstein.Ft "enum clnt_stat"
418360efbdSAlfred Perlstein.Fo rpc_broadcast
428360efbdSAlfred Perlstein.Fa "const rpcprog_t prognum" "const rpcvers_t versnum"
438360efbdSAlfred Perlstein.Fa "const rpcproc_t procnum" "const xdrproc_t inproc"
448360efbdSAlfred Perlstein.Fa "const caddr_t in" "const xdrproc_t outproc" "caddr_t out"
458360efbdSAlfred Perlstein.Fa "const resultproc_t eachresult" "const char *nettype"
468360efbdSAlfred Perlstein.Fc
478360efbdSAlfred Perlstein.Ft "enum clnt_stat"
488360efbdSAlfred Perlstein.Fo rpc_broadcast_exp
498360efbdSAlfred Perlstein.Fa "rpcprog_t prognum" "const rpcvers_t versnum"
508360efbdSAlfred Perlstein.Fa "const rpcproc_t procnum" "const xdrproc_t xargs"
518360efbdSAlfred Perlstein.Fa "caddr_t argsp" "const xdrproc_t xresults"
528360efbdSAlfred Perlstein.Fa "caddr_t resultsp" "const int inittime" "const int waittime"
538360efbdSAlfred Perlstein.Fa "const resultproc_t eachresult" "const char * nettype"
548360efbdSAlfred Perlstein.Fc
558360efbdSAlfred Perlstein.Ft "enum clnt_stat"
568360efbdSAlfred Perlstein.Fo rpc_call
578360efbdSAlfred Perlstein.Fa "const char *host" "const rpcprog_t prognum"
588360efbdSAlfred Perlstein.Fa "const rpcvers_t versnum" "const rpcproc_t procnum"
598360efbdSAlfred Perlstein.Fa "const xdrproc_t inproc" "const char *in"
608360efbdSAlfred Perlstein.Fa "const xdrproc_t outproc" "char *out" "const char *nettype"
618360efbdSAlfred Perlstein.Fc
628360efbdSAlfred Perlstein.Sh DESCRIPTION
638360efbdSAlfred PerlsteinRPC library routines allow C language programs to make procedure
648360efbdSAlfred Perlsteincalls on other machines across the network.
658360efbdSAlfred PerlsteinFirst, the client calls a procedure to send a request to the server.
668360efbdSAlfred PerlsteinUpon receipt of the request, the server calls a dispatch routine
678360efbdSAlfred Perlsteinto perform the requested service, and then sends back a reply.
688360efbdSAlfred Perlstein.Pp
698360efbdSAlfred PerlsteinThe
708360efbdSAlfred Perlstein.Fn clnt_call ,
718360efbdSAlfred Perlstein.Fn rpc_call ,
728360efbdSAlfred Perlsteinand
738360efbdSAlfred Perlstein.Fn rpc_broadcast
748360efbdSAlfred Perlsteinroutines handle the client side of the procedure call.
758360efbdSAlfred PerlsteinThe remaining routines deal with error handling in the case of errors.
768360efbdSAlfred Perlstein.Pp
778360efbdSAlfred PerlsteinSome of the routines take a
788360efbdSAlfred Perlstein.Vt CLIENT
798360efbdSAlfred Perlsteinhandle as one of the parameters.
808360efbdSAlfred PerlsteinA
818360efbdSAlfred Perlstein.Vt CLIENT
828360efbdSAlfred Perlsteinhandle can be created by an RPC creation routine such as
838360efbdSAlfred Perlstein.Fn clnt_create
848360efbdSAlfred Perlstein(see
858360efbdSAlfred Perlstein.Xr rpc_clnt_create 3 ) .
868360efbdSAlfred Perlstein.Pp
878360efbdSAlfred PerlsteinThese routines are safe for use in multithreaded applications.
888360efbdSAlfred Perlstein.Vt CLIENT
898360efbdSAlfred Perlsteinhandles can be shared between threads, however in this implementation
908360efbdSAlfred Perlsteinrequests by different threads are serialized (that is, the first request will
918360efbdSAlfred Perlsteinreceive its results before the second request is sent).
928360efbdSAlfred Perlstein.Sh Routines
938360efbdSAlfred PerlsteinSee
948360efbdSAlfred Perlstein.Xr rpc 3
958360efbdSAlfred Perlsteinfor the definition of the
968360efbdSAlfred Perlstein.Vt CLIENT
978360efbdSAlfred Perlsteindata structure.
988360efbdSAlfred Perlstein.Bl -tag -width XXXXX
998360efbdSAlfred Perlstein.It Fn clnt_call
1008360efbdSAlfred PerlsteinA function macro that calls the remote procedure
1018360efbdSAlfred Perlstein.Fa procnum
1028360efbdSAlfred Perlsteinassociated with the client handle,
1038360efbdSAlfred Perlstein.Fa clnt ,
1048360efbdSAlfred Perlsteinwhich is obtained with an RPC
1058360efbdSAlfred Perlsteinclient creation routine such as
1068360efbdSAlfred Perlstein.Fn clnt_create
1078360efbdSAlfred Perlstein(see
1088360efbdSAlfred Perlstein.Xr rpc_clnt_create 3 ) .
1098360efbdSAlfred PerlsteinThe parameter
1108360efbdSAlfred Perlstein.Fa inproc
1118360efbdSAlfred Perlsteinis the XDR function used to encode the procedure's parameters, and
1128360efbdSAlfred Perlstein.Fa outproc
1138360efbdSAlfred Perlsteinis the XDR function used to decode the procedure's results;
1148360efbdSAlfred Perlstein.Fa in
1158360efbdSAlfred Perlsteinis the address of the procedure's argument(s), and
1168360efbdSAlfred Perlstein.Fa out
1178360efbdSAlfred Perlsteinis the address of where to place the result(s).
1188360efbdSAlfred Perlstein.Fa tout
1198360efbdSAlfred Perlsteinis the time allowed for results to be returned, which is overridden by
1208360efbdSAlfred Perlsteina time-out set explicitly through
1218360efbdSAlfred Perlstein.Fn clnt_control ,
1228360efbdSAlfred Perlsteinsee
1238360efbdSAlfred Perlstein.Xr rpc_clnt_create 3 .
1248360efbdSAlfred PerlsteinIf the remote call succeeds, the status returned is
1258360efbdSAlfred Perlstein.Dv RPC_SUCCESS ,
1268360efbdSAlfred Perlsteinotherwise an appropriate status is returned.
1278360efbdSAlfred Perlstein.It Fn clnt_freeres
1288360efbdSAlfred PerlsteinA function macro that frees any data allocated by the
1298360efbdSAlfred PerlsteinRPC/XDR system when it decoded the results of an RPC call.
1308360efbdSAlfred PerlsteinThe parameter
1318360efbdSAlfred Perlstein.Fa out
1328360efbdSAlfred Perlsteinis the address of the results, and
1338360efbdSAlfred Perlstein.Fa outproc
1348360efbdSAlfred Perlsteinis the XDR routine describing the results.
1358360efbdSAlfred PerlsteinThis routine returns 1 if the results were successfully freed,
1368360efbdSAlfred Perlsteinand 0 otherwise.
1378360efbdSAlfred Perlstein.It Fn clnt_geterr
1388360efbdSAlfred PerlsteinA function macro that copies the error structure out of the client
1398360efbdSAlfred Perlsteinhandle to the structure at address
1408360efbdSAlfred Perlstein.Fa errp .
1418360efbdSAlfred Perlstein.It Fn clnt_perrno
1428360efbdSAlfred PerlsteinPrint a message to standard error corresponding
1438360efbdSAlfred Perlsteinto the condition indicated by
1448360efbdSAlfred Perlstein.Fa stat .
1458360efbdSAlfred PerlsteinA newline is appended.
1468360efbdSAlfred PerlsteinNormally used after a procedure call fails for a routine
1478360efbdSAlfred Perlsteinfor which a client handle is not needed, for instance
1488360efbdSAlfred Perlstein.Fn rpc_call .
1498360efbdSAlfred Perlstein.It Fn clnt_perror
1508360efbdSAlfred PerlsteinPrint a message to the standard error indicating why an
1518360efbdSAlfred PerlsteinRPC call failed;
1528360efbdSAlfred Perlstein.Fa clnt
1538360efbdSAlfred Perlsteinis the handle used to do the call.
1548360efbdSAlfred PerlsteinThe message is prepended with string
1558360efbdSAlfred Perlstein.Fa s
1568360efbdSAlfred Perlsteinand a colon.
1578360efbdSAlfred PerlsteinA newline is appended.
1588360efbdSAlfred PerlsteinNormally used after a remote procedure call fails
1598360efbdSAlfred Perlsteinfor a routine which requires a client handle,
1608360efbdSAlfred Perlsteinfor instance
1618360efbdSAlfred Perlstein.Fn clnt_call .
1628360efbdSAlfred Perlstein.It Fn clnt_sperrno
1638360efbdSAlfred PerlsteinTake the same arguments as
1648360efbdSAlfred Perlstein.Fn clnt_perrno ,
1658360efbdSAlfred Perlsteinbut instead of sending a message to the standard error
1668360efbdSAlfred Perlsteinindicating why an RPC
1678360efbdSAlfred Perlsteincall failed, return a pointer to a string which contains the message.
1688360efbdSAlfred Perlstein.Fn clnt_sperrno
1698360efbdSAlfred Perlsteinis normally used instead of
1708360efbdSAlfred Perlstein.Fn clnt_perrno
1718360efbdSAlfred Perlsteinwhen the program does not have a standard error (as a program
1728360efbdSAlfred Perlsteinrunning as a server quite likely does not), or if the programmer
1738360efbdSAlfred Perlsteindoes not want the message to be output with
1748360efbdSAlfred Perlstein.Fn printf
1758360efbdSAlfred Perlstein(see
1768360efbdSAlfred Perlstein.Xr printf 3 ) ,
1778360efbdSAlfred Perlsteinor if a message format different than that supported by
1788360efbdSAlfred Perlstein.Fn clnt_perrno
1798360efbdSAlfred Perlsteinis to be used.
1808360efbdSAlfred PerlsteinNote:
1818360efbdSAlfred Perlsteinunlike
1828360efbdSAlfred Perlstein.Fn clnt_sperror
1838360efbdSAlfred Perlsteinand
1848360efbdSAlfred Perlstein.Fn clnt_spcreaterror
1858360efbdSAlfred Perlstein(see
1868360efbdSAlfred Perlstein.Xr rpc_clnt_create 3 ) ,
1878360efbdSAlfred Perlstein.Fn clnt_sperrno
1888360efbdSAlfred Perlsteindoes not return pointer to static data so the
1898360efbdSAlfred Perlsteinresult will not get overwritten on each call.
1908360efbdSAlfred Perlstein.It Fn clnt_sperror
1918360efbdSAlfred PerlsteinLike
1928360efbdSAlfred Perlstein.Fn clnt_perror ,
1938360efbdSAlfred Perlsteinexcept that (like
1948360efbdSAlfred Perlstein.Fn clnt_sperrno )
1958360efbdSAlfred Perlsteinit returns a string instead of printing to standard error.
1968360efbdSAlfred PerlsteinHowever,
1978360efbdSAlfred Perlstein.Fn clnt_sperror
1988360efbdSAlfred Perlsteindoes not append a newline at the end of the message.
1998360efbdSAlfred PerlsteinWarning:
2008360efbdSAlfred Perlsteinreturns pointer to a buffer that is overwritten
2018360efbdSAlfred Perlsteinon each call.
2028360efbdSAlfred Perlstein.It Fn rpc_broadcast
2038360efbdSAlfred PerlsteinLike
2048360efbdSAlfred Perlstein.Fn rpc_call ,
2058360efbdSAlfred Perlsteinexcept the call message is broadcast to
2068360efbdSAlfred Perlsteinall the connectionless transports specified by
2078360efbdSAlfred Perlstein.Fa nettype .
2088360efbdSAlfred PerlsteinIf
2098360efbdSAlfred Perlstein.Fa nettype
2108360efbdSAlfred Perlsteinis
2118360efbdSAlfred Perlstein.Dv NULL ,
2128360efbdSAlfred Perlsteinit defaults to
2138360efbdSAlfred Perlstein.Qq netpath .
2148360efbdSAlfred PerlsteinEach time it receives a response,
2158360efbdSAlfred Perlsteinthis routine calls
2168360efbdSAlfred Perlstein.Fn eachresult ,
2178360efbdSAlfred Perlsteinwhose form is:
2188360efbdSAlfred Perlstein.Ft bool_t
2198360efbdSAlfred Perlstein.Fn eachresult "caddr_t out" "const struct netbuf * addr" "const struct netconfig * netconf"
2208360efbdSAlfred Perlsteinwhere
2218360efbdSAlfred Perlstein.Fa out
2228360efbdSAlfred Perlsteinis the same as
2238360efbdSAlfred Perlstein.Fa out
2248360efbdSAlfred Perlsteinpassed to
2258360efbdSAlfred Perlstein.Fn rpc_broadcast ,
2268360efbdSAlfred Perlsteinexcept that the remote procedure's output is decoded there;
2278360efbdSAlfred Perlstein.Fa addr
2288360efbdSAlfred Perlsteinpoints to the address of the machine that sent the results, and
2298360efbdSAlfred Perlstein.Fa netconf
2308360efbdSAlfred Perlsteinis the netconfig structure of the transport on which the remote
2318360efbdSAlfred Perlsteinserver responded.
2328360efbdSAlfred PerlsteinIf
2338360efbdSAlfred Perlstein.Fn eachresult
2348360efbdSAlfred Perlsteinreturns 0,
2358360efbdSAlfred Perlstein.Fn rpc_broadcast
2368360efbdSAlfred Perlsteinwaits for more replies;
2378360efbdSAlfred Perlsteinotherwise it returns with appropriate status.
2388360efbdSAlfred PerlsteinWarning:
2398360efbdSAlfred Perlsteinbroadcast file descriptors are limited in size to the
2408360efbdSAlfred Perlsteinmaximum transfer size of that transport.
2418360efbdSAlfred PerlsteinFor Ethernet, this value is 1500 bytes.
2428360efbdSAlfred Perlstein.Fn rpc_broadcast
2438360efbdSAlfred Perlsteinuses
2448360efbdSAlfred Perlstein.Dv AUTH_SYS
2458360efbdSAlfred Perlsteincredentials by default (see
2468360efbdSAlfred Perlstein.Xr rpc_clnt_auth 3 ) .
2478360efbdSAlfred Perlstein.It Fn rpc_broadcast_exp
2488360efbdSAlfred PerlsteinLike
2498360efbdSAlfred Perlstein.Fn rpc_broadcast ,
2508360efbdSAlfred Perlsteinexcept that the initial timeout,
2518360efbdSAlfred Perlstein.Fa inittime
2528360efbdSAlfred Perlsteinand the maximum timeout,
2538360efbdSAlfred Perlstein.Fa waittime
2548360efbdSAlfred Perlsteinare specified in milliseconds.
2558360efbdSAlfred Perlstein.Fa inittime
2568360efbdSAlfred Perlsteinis the initial time that
2578360efbdSAlfred Perlstein.Fn rpc_broadcast_exp
2588360efbdSAlfred Perlsteinwaits before resending the request.
2598360efbdSAlfred PerlsteinAfter the first resend, the re-transmission interval
2608360efbdSAlfred Perlsteinincreases exponentially until it exceeds
2618360efbdSAlfred Perlstein.Fa waittime .
2628360efbdSAlfred Perlstein.It Fn rpc_call
2638360efbdSAlfred PerlsteinCall the remote procedure associated with
2648360efbdSAlfred Perlstein.Fa prognum ,
2658360efbdSAlfred Perlstein.Fa versnum ,
2668360efbdSAlfred Perlsteinand
2678360efbdSAlfred Perlstein.Fa procnum
2688360efbdSAlfred Perlsteinon the machine,
2698360efbdSAlfred Perlstein.Fa host .
2708360efbdSAlfred PerlsteinThe parameter
2718360efbdSAlfred Perlstein.Fa inproc
2728360efbdSAlfred Perlsteinis used to encode the procedure's parameters, and
2738360efbdSAlfred Perlstein.Fa outproc
2748360efbdSAlfred Perlsteinis used to decode the procedure's results;
2758360efbdSAlfred Perlstein.Fa in
2768360efbdSAlfred Perlsteinis the address of the procedure's argument(s), and
2778360efbdSAlfred Perlstein.Fa out
2788360efbdSAlfred Perlsteinis the address of where to place the result(s).
2798360efbdSAlfred Perlstein.Fa nettype
2808360efbdSAlfred Perlsteincan be any of the values listed on
2818360efbdSAlfred Perlstein.Xr rpc 3 .
2828360efbdSAlfred PerlsteinThis routine returns
2838360efbdSAlfred Perlstein.Dv RPC_SUCCESS
2848360efbdSAlfred Perlsteinif it succeeds,
2858360efbdSAlfred Perlsteinor an appropriate status is returned.
2868360efbdSAlfred PerlsteinUse the
2878360efbdSAlfred Perlstein.Fn clnt_perrno
2888360efbdSAlfred Perlsteinroutine to translate failure status into error messages.
2898360efbdSAlfred PerlsteinWarning:
2908360efbdSAlfred Perlstein.Fn rpc_call
2918360efbdSAlfred Perlsteinuses the first available transport belonging
2928360efbdSAlfred Perlsteinto the class
2938360efbdSAlfred Perlstein.Fa nettype ,
2948360efbdSAlfred Perlsteinon which it can create a connection.
2958360efbdSAlfred PerlsteinYou do not have control of timeouts or authentication
2968360efbdSAlfred Perlsteinusing this routine.
2978360efbdSAlfred Perlstein.El
2988360efbdSAlfred Perlstein.Sh SEE ALSO
2998360efbdSAlfred Perlstein.Xr printf 3 ,
3008360efbdSAlfred Perlstein.Xr rpc 3 ,
3018360efbdSAlfred Perlstein.Xr rpc_clnt_auth 3 ,
3028360efbdSAlfred Perlstein.Xr rpc_clnt_create 3
303