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 18411d84435SRuslan Ermilov.Fn clnt_spcreateerror 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