⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpc.3n

📁 早期freebsd实现
💻 3N
📖 第 1 页 / 共 2 页
字号:
.\" @(#)rpc.3n	2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI.TH RPC 3N "16 February 1988".SH NAMErpc \- library routines for remote procedure calls.SH SYNOPSIS AND DESCRIPTIONThese routines allow C programs to make procedurecalls on other machines across the network.First, the client calls a procedure to send adata packet to the server.Upon receipt of the packet, the server calls a dispatch routineto perform the requested service, and then sends back areply.Finally, the procedure call returns to the client..LPRoutines that are used for Secure RPC (DES authentication) are described in.BR rpc_secure (3N).Secure RPC can be used only if DES encryption is available..LP.ft B.nf.sp .5#include <rpc/rpc.h>.fi.ft R.br.if t .ne 8.LP.ft B.nf.sp .5voidauth_destroy(auth)\s-1AUTH\s0 *auth;.fi.ft R.IPA macro that destroys the authentication information associated with.IR auth .Destruction usually involves deallocation of private datastructures. The use of.I authis undefined after calling.BR auth_destroy(\|) ..br.if t .ne 6.LP.ft B.nf.sp .5\s-1AUTH\s0 *authnone_create(\|).fi.ft R.IPCreate and returns an.SM RPCauthentication handle that passes nonusable authenticationinformation with each remote procedure call. This is thedefault authentication used by.SM RPC..if t .ne 10.LP.ft B.nf.sp .5\s-1AUTH\s0 *authunix_create(host, uid, gid, len, aup_gids)char *host;int uid, gid, len, *aup.gids;.fi.ft R.IPCreate and return an.SM RPCauthentication handle that contains.UXauthentication information.The parameter.I hostis the name of the machine on which the information wascreated;.I uidis the user's user.SM ID ;.I gidis the user's current group.SM ID ;.I lenand.I aup_gidsrefer to a counted array of groups to which the user belongs.It is easy to impersonate a user..br.if t .ne 5.LP.ft B.nf.sp .5\s-1AUTH\s0 *authunix_create_default(\|).fi.ft R.IPCalls.B authunix_create(\|)with the appropriate parameters..br.if t .ne 13.LP.ft B.nf.sp .5callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)char *host;u_long prognum, versnum, procnum;char *in, *out;xdrproc_t inproc, outproc;.fi.ft R.IPCall the remote procedure associated with.IR prognum ,.IR versnum ,and.I procnumon the machine,.IR host .The parameter.I inis the address of the procedure's argument(s), and.I outis the address of where to place the result(s);.I inprocis used to encode the procedure's parameters, and.I outprocis used to decode the procedure's results.This routine returns zero if it succeeds, or the value of.B "enum clnt_stat"cast to an integer if it fails.The routine.B clnt_perrno(\|)is handy for translating failure statuses into messages..IPWarning: calling remote procedures with this routineuses.SM UDP/IPas a transport; see.B clntudp_create(\|)for restrictions.You do not have control of timeouts or authentication usingthis routine..br.if t .ne 16.LP.ft B.nf.sp .5enum clnt_statclnt_broadcast(prognum, versnum, procnum, inproc, in, outproc, out, eachresult)u_long prognum, versnum, procnum;char *in, *out;xdrproc_t inproc, outproc;resultproc_t eachresult;.fi.ft R.IPLike.BR callrpc(\|) ,except the call message is broadcast to all locallyconnected broadcast nets. Each time it receives aresponse, this routine calls.BR eachresult(\|) ,whose form is:.IP.RS 1i.ft B.nfeachresult(out, addr)char *out;struct sockaddr_in *addr;.ft R.fi.RE.IPwhere.I outis the same as.I outpassed to.BR clnt_broadcast(\|) ,except that the remote procedure's output is decoded there;.I addrpoints to the address of the machine that sent the results.If.B eachresult(\|)returns zero,.B clnt_broadcast(\|)waits for more replies; otherwise it returns with appropriatestatus..IPWarning: broadcast sockets are limited in size to themaximum transfer unit of the data link. For ethernet,this value is 1500 bytes..br.if t .ne 13.LP.ft B.nf.sp .5enum clnt_statclnt_call(clnt, procnum, inproc, in, outproc, out, tout)\s-1CLIENT\s0 *clnt;u_longprocnum;xdrproc_t inproc, outproc;char *in, *out;struct timeval tout;.fi.ft R.IPA macro that calls the remote procedure.I procnumassociated with the client handle,.IR clnt ,which is obtained with an.SM RPCclient creation routine such as.BR clnt_create(\|) .The parameter.I inis the address of the procedure's argument(s), and.I outis the address of where to place the result(s);.I inprocis used to encode the procedure's parameters, and.I outprocis used to decode the procedure's results;.I toutis the time allowed for results to come back..br.if t .ne 7.LP.ft B.nf.sp .5clnt_destroy(clnt)\s-1CLIENT\s0 *clnt;.fi.ft R.IPA macro that destroys the client's.SM RPChandle. Destruction usually involves deallocationof private data structures, including.I clntitself.  Use of.I clntis undefined after calling.BR clnt_destroy(\|) .If the.SM RPClibrary opened the associated socket, it will close it also.Otherwise, the socket remains open..br.if t .ne 10.LP.ft B.nf.sp .5\s-1CLIENT\s0 *clnt_create(host, prog, vers, proto)char *host;u_long prog, vers;char *proto;.fi.ft R.IPGeneric client creation routine..I hostidentifies the name of the remote host where the serveris located..I protoindicates which kind of transport protocol to use. Thecurrently supported values for this field are \(lqudp\(rqand \(lqtcp\(rq.Default timeouts are set, but can be modified using.BR clnt_control(\|) ..IPWarning: Using.SM UDPhas its shortcomings.  Since.SM UDP\s0-based.SM RPCmessages can only hold up to 8 Kbytes of encoded data,this transport cannot be used for procedures that takelarge arguments or return huge results..br.if t .ne 10.LP.ft B.nf.sp .5bool_tclnt_control(cl, req, info)\s-1CLIENT\s0 *cl;char *info;.fi.ft R.IPA macro used to change or retrieve various informationabout a client object..I reqindicates the type of operation, and.I infois a pointer to the information. For both.SM UDPand.SM TCP\s0,the supported values of.I reqand their argument types and what they do are:.IP.nf.ta +2.0i +2.0i +2.0i.SM CLSET_TIMEOUT\s0	struct timeval	set total timeout.SM CLGET_TIMEOUT\s0	struct timeval	get total timeout.fi.IPNote: if you set the timeout using.BR clnt_control(\|) ,the timeout parameter passed to.B clnt_call(\|)will be ignored in all future calls..IP.nf.SM CLGET_SERVER_ADDR\s0	struct sockaddr_in 	get server's address.fi.br.IPThe following operations are valid for.SM UDPonly:.IP.nf.ta +2.0i ; +2.0i ; +2.0i.SM CLSET_RETRY_TIMEOUT\s0		struct timeval	set the retry timeout.SM CLGET_RETRY_TIMEOUT\s0		struct timeval	get the retry timeout.fi.br.IPThe retry timeout is the time that.SM "UDP RPC"waits for the server to reply beforeretransmitting the request..br.if t .ne 10.LP.ft B.nf.sp .5clnt_freeres(clnt, outproc, out)\s-1CLIENT\s0 *clnt;xdrproc_t outproc;char *out;.fi.ft R.IPA macro that frees any data allocated by the.SM RPC/XDRsystem when it decoded the results of an.SM RPCcall.  Theparameter.I outis the address of the results, and.I outprocis the.SM XDRroutine describing the results.This routine returns one if the results were successfullyfreed,and zero otherwise..br.if t .ne 6.LP.ft B.nf.sp .5voidclnt_geterr(clnt, errp)\s-1CLIENT\s0 *clnt;struct rpc_err *errp;.fi.ft R.IPA macro that copies the error structure out of the clienthandleto the structure at address.IR errp ..br.if t .ne 8.LP.ft B.nf.sp .5voidclnt_pcreateerror(s)char *s;.fi.ft R.IPPrint a message to standard error indicatingwhy a client.SM RPChandle could not be created.The message is prepended with string.I sand a colon.Used when a.BR clnt_create(\|) ,.BR clntraw_create(\|) ,.BR clnttcp_create(\|) ,or.B clntudp_create(\|)call fails..br.if t .ne 8.LP.ft B.nf.sp .5voidclnt_perrno(stat)enum clnt_stat stat;.fi.ft R.IPPrint a message to standard error correspondingto the condition indicated by.IR stat .Used after.BR callrpc(\|) ..br.if t .ne 8.LP.ft B.nf.sp .5clnt_perror(clnt, s)\s-1CLIENT\s0 *clnt;char *s;.fi.ft R.IPPrint a message to standard error indicating why an.SM RPCcall failed;.I clntis the handle used to do the call.The message is prepended with string.I sand a colon.Used after.BR clnt_call(\|) ..br.if t .ne 9.LP.ft B.nf.sp .5char *clnt_spcreateerrorchar *s;.fi.ft R.IPLike.BR clnt_pcreateerror(\|) ,except that it returns a stringinstead of printing to the standard error..IPBugs: returns pointer to static data that is overwrittenon each call..br.if t .ne 9.LP.ft B.nf.sp .5char *clnt_sperrno(stat)enum clnt_stat stat;.fi.ft R.IPTake the same arguments as.BR clnt_perrno(\|) ,but instead of sending a message to the standard errorindicating why an.SM RPCcall failed, return a pointer to a string which containsthe message.  The string ends with a.SM NEWLINE\s0..IP.B clnt_sperrno(\|)is used instead of.B clnt_perrno(\|)if the program does not have a standard error (as a programrunning as a server quite likely does not), or if theprogrammerdoes not want the message to be output with.BR printf ,or if a message format different than that supported by.B clnt_perrno(\|)is to be used.Note: unlike.B clnt_sperror(\|)and.BR clnt_spcreaterror(\|) ,.B clnt_sperrno(\|)returns pointer to static data, but theresult will not get overwritten on each call..br.if t .ne 7.LP.ft B.nf.sp .5char *clnt_sperror(rpch, s)\s-1CLIENT\s0 *rpch;char *s;.fi.ft R.IPLike.BR clnt_perror(\|) ,except that (like.BR clnt_sperrno(\|) )it returns a string instead of printing to standard error..IPBugs: returns pointer to static data that is overwrittenon each call..br.if t .ne 10.LP.ft B.nf.sp .5\s-1CLIENT\s0 *clntraw_create(prognum, versnum)u_long prognum, versnum;.fi.ft R.IPThis routine creates a toy.SM RPCclient for the remote program.IR prognum ,version.IR versnum .The transport used to pass messages to the service isactually a buffer within the process's address space, so thecorresponding.SM RPCserver should live in the same address space; see.BR svcraw_create(\|) .This allows simulation of.SM RPCand acquisition of.SM RPCoverheads, such as round trip times, without anykernel interference. This routine returns.SM NULLif it fails..br.if t .ne 15.LP.ft B.nf.sp .5\s-1CLIENT\s0 *clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz)struct sockaddr_in *addr;u_long prognum, versnum;int *sockp;u_int sendsz, recvsz;.fi.ft R.IPThis routine creates an.SM RPCclient for the remote program.IR prognum ,version.IR versnum ;the client uses.SM TCP/IPas a transport. The remote program is located at Internetaddress.IR *addr .If.\"The following in-line font conversion is necessary for the hyphen indicator\fB\%addr\->sin_port\fRis zero, then it is set to the actual port that the remoteprogram is listening on (the remote.B portmapservice is consulted for this information). The parameter.I sockpis a socket; if it is.BR \s-1RPC_ANYSOCK\s0 ,then this routine opens a new one and sets.IR sockp .Since.SM TCP\s0-based.SM RPCuses buffered.SM I/O ,the user may specify the size of the send and receive bufferswith the parameters.I sendszand.IR recvsz ;values of zero choose suitable defaults.This routine returns.SM NULLif it fails..br.if t .ne 15.LP.ft B.nf.sp .5\s-1CLIENT\s0 *clntudp_create(addr, prognum, versnum, wait, sockp)struct sockaddr_in *addr;u_long prognum, versnum;struct timeval wait;int *sockp;.fi.ft R.IPThis routine creates an.SM RPCclient for the remote program.IR prognum ,version.IR versnum ;the client uses use.SM UDP/IPas a transport. The remote program is located at Internetaddress.IR addr .If\fB\%addr\->sin_port\fRis zero, then it is set to actual port that the remoteprogram is listening on (the remote.B portmapservice is consulted for this information). The parameter.I sockpis a socket; if it is.BR \s-1RPC_ANYSOCK\s0 ,then this routine opens a new one and sets.IR sockp .The.SM UDPtransport resends the call message in intervals of.B waittime until a response is received or until the call timesout.The total time for the call to time out is specified by.BR clnt_call(\|) ..IPWarning: since.SM UDP\s0-based.SM RPCmessages can only hold up to 8 Kbytesof encoded data, this transport cannot be used for proceduresthat take large arguments or return huge results..br.if t .ne 8.LP.ft B.nf.sp .5\s-1CLIENT\s0 *clntudp_bufcreate(addr, prognum, versnum, wait, sockp, sendsize, recosize)struct sockaddr_in *addr;u_long prognum, versnum;struct timeval wait;int *sockp;unsigned int sendsize;unsigned int recosize;.fi.ft R.IPThis routine creates an.SM RPCclient for the remote program.IR prognum ,on.IR versnum ;the client uses use.SM UDP/IPas a transport. The remote program is located at Internetaddress.IR addr .If\fB\%addr\->sin_port\fRis zero, then it is set to actual port that the remoteprogram is listening on (the remote.B portmapservice is consulted for this information). The parameter.I sockpis a socket; if it is.BR \s-1RPC_ANYSOCK\s0 ,then this routine opens a new one and sets.BR sockp .The.SM UDPtransport resends the call message in intervals of.B waittime until a response is received or until the call timesout.The total time for the call to time out is specified by.BR clnt_call(\|) ..IPThis allows the user to specify the maximun packet size for sending and receiving .SM UDP\s0-based.SM RPCmessages..br.if t .ne 7.LP.ft B.nf.sp .5voidget_myaddress(addr)struct sockaddr_in *addr;.fi.ft R.IPStuff the machine's.SM IPaddress into.IR *addr ,without consulting the library routines that deal with.BR /etc/hosts .The port number is always set to.BR htons(\s-1PMAPPORT\s0) ..br.if t .ne 10.LP.ft B.nf.sp .5struct pmaplist *pmap_getmaps(addr)struct sockaddr_in *addr;.fi.ft R.IPA user interface to the.B portmapservice, which returns a list of the current.SM RPCprogram-to-port mappingson the host located at.SM IPaddress.IR *addr .This routine can return.SM NULL .The command.RB ` "rpcinfo \-p" 'uses this routine..br.if t .ne 12.LP.ft B.nf.sp .5u_shortpmap_getport(addr, prognum, versnum, protocol)struct sockaddr_in *addr;u_long prognum, versnum, protocol;.fi.ft R.IPA user interface to the.B portmapservice, which returns the port numberon which waits a service that supports program number.IR prognum ,version.IR versnum ,and speaks the transport protocol associated with.IR protocol .The value of.I protocolis most likely.B.SM IPPROTO_UDPor .BR \s-1IPPROTO_TCP\s0 .A return value of zero means that the mapping does not existor thatthe.SM RPCsystem failured to contact the remote.B portmapservice.  In the latter case, the global variable.B rpc_createerr(\|)contains the.SM RPCstatus..br.if t .ne 15.LP.ft B.nf.sp .5enum clnt_statpmap_rmtcall(addr, prognum, versnum, procnum, inproc, in, outproc, out, tout, portp)struct sockaddr_in *addr;u_long prognum, versnum, procnum;char *in, *out;xdrproc_t inproc, outproc;struct timeval tout;u_long *portp;.fi.ft R.IPA user interface to the.B portmapservice, which instructs.B portmapon the host at.SM IPaddress.I *addrto make an.SM RPCcall on your behalf to a procedure on that host.The parameter.I *portpwill be modified to the program's port number if theproceduresucceeds. The definitions of other parameters are discussedin.B callrpc(\|)and.BR clnt_call(\|) .This procedure should be used for a \(lqping\(rq and nothingelse.See also.BR clnt_broadcast(\|) ..br.if t .ne 9.LP.ft B.nf.sp .5pmap_set(prognum, versnum, protocol, port)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -