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

📄 rpc.3n

📁 早期freebsd实现
💻 3N
📖 第 1 页 / 共 2 页
字号:
u_long prognum, versnum, protocol;u_short port;.fi.ft R.IPA user interface to the.B portmapservice, which establishes a mapping between the triple.RI [ prognum , versnum , protocol\fR]and.I porton the machine's.B portmapservice. The value of.I protocolis most likely.B.SM IPPROTO_UDPor .BR \s-1IPPROTO_TCP\s0 .This routine returns one if it succeeds, zero otherwise.Automatically done by.BR svc_register(\|) ..br.if t .ne 7.LP.ft B.nf.sp .5pmap_unset(prognum, versnum)u_long prognum, versnum;.fi.ft R.IPA user interface to the.B portmapservice, which destroys all mapping between the triple.RI [ prognum , versnum , *\fR]and.B portson the machine's.B portmapservice. This routine returns one if it succeeds, zerootherwise..br.if t .ne 15.LP.ft B.nf.sp .5registerrpc(prognum, versnum, procnum, procname, inproc, outproc)u_long prognum, versnum, procnum;char *(*procname) (\|) ;xdrproc_t inproc, outproc;.fi.ft R.IPRegister procedure.I procnamewith the.SM RPCservice package.  If a request arrives for program.IR prognum ,version.IR versnum ,and procedure.IR procnum ,.I procnameis called with a pointer to its parameter(s);.I prognameshould return a pointer to its static result(s);.I inprocis used to decode the parameters while.I outprocis used to encode the results.This routine returns zero if the registration succeeded, \-1otherwise..IPWarning: remote procedures registered in this formare accessed using the.SM UDP/IPtransport; see.B svcudp_create(\|)for restrictions..br.if t .ne 5.LP.ft B.nf.sp .5struct rpc_createerr     rpc_createerr;.fi.ft R.IPA global variable whose value is set by any.SM RPCclient creation routinethat does not succeed.  Use the routine.B clnt_pcreateerror(\|)to print the reason why..if t .ne 7.LP.ft B.nf.sp .5svc_destroy(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPA macro that destroys the.SM RPCservice transport handle,.IR xprt .Destruction usually involves deallocationof private data structures, including.I xprtitself.  Use of.I xprtis undefined after calling this routine..br.if t .ne 8.LP.ft B.nf.sp .5fd_set svc_fdset;.fi.ft R.IPA global variable reflecting the.SM RPCservice side'sread file descriptor bit mask; it is suitable as a parameterto the.B selectsystem call. This is only of interestif a service implementor does not call.BR svc_run(\|) ,but rather does his own asynchronous event processing.This variable is read-only (do not pass its address to.BR select !),yet it may change after calls to.B svc_getreqset(\|)or any creation routines..br.if t .ne 6.LP.ft B.nf.sp .5int svc_fds;.fi.ft R.IPSimilar to.BR svc_fedset(\|) ,but limited to 32 descriptors. Thisinterface is obsoleted by.BR svc_fdset(\|) ..br.if t .ne 9.LP.ft B.nf.sp .5svc_freeargs(xprt, inproc, in)\s-1SVCXPRT\s0 *xprt;xdrproc_t inproc;char *in;.fi.ft R.IPA macro that frees any data allocated by the.SM RPC/XDRsystem when it decoded the arguments to a service procedureusing.BR svc_getargs(\|) .This routine returns 1 if the results were successfullyfreed,and zero otherwise..br.if t .ne 10.LP.ft B.nf.sp .5svc_getargs(xprt, inproc, in)\s-1SVCXPRT\s0 *xprt;xdrproc_t inproc;char *in;.fi.ft R.IPA macro that decodes the arguments of an.SM RPCrequestassociated with the.SM RPCservice transport handle,.IR xprt .The parameter.I inis the address where the arguments will be placed;.I inprocis the.SM XDRroutine used to decode the arguments.This routine returns one if decoding succeeds, and zerootherwise..br.if t .ne 9.LP.ft B.nf.sp .5struct sockaddr_in *svc_getcaller(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPThe approved way of getting the network address of the callerof a procedure associated with the.SM RPCservice transport handle,.IR xprt ..br.if t .ne 9.LP.ft B.nf.sp .5svc_getreqset(rdfds)fd_set *rdfds;.fi.ft R.IPThis routine is only of interest if a service implementordoes not call.BR svc_run(\|) ,but instead implements custom asynchronous event processing.It is called when the.B selectsystem call has determined that an.SM RPCrequest has arrived on some.SM RPC.B socket(s) ;.I rdfdsis the resultant read file descriptor bit mask.The routine returns when all sockets associated with thevalue of.I rdfdshave been serviced..br.if t .ne 6.LP.ft B.nf.sp .5svc_getreq(rdfds)int rdfds;.fi.ft R.IPSimilar to.BR svc_getreqset(\|) ,but limited to 32 descriptors. This interface is obsoleted by.BR svc_getreqset(\|) ..br.if t .ne 17.LP.ft B.nf.sp .5svc_register(xprt, prognum, versnum, dispatch, protocol)\s-1SVCXPRT\s0 *xprt;u_long prognum, versnum;void (*dispatch) (\|);u_long protocol;.fi.ft R.IPAssociates.I prognumand.I versnumwith the service dispatch procedure,.IR dispatch .If.I protocolis zero, the service is not registered with the.B portmapservice.  If.I protocolis non-zero, then a mapping of the triple.RI [ prognum , versnum , protocol\fR]to\fB\%xprt\->xp_port\fRis established with the local.B portmapservice (generally.I protocolis zero,.B.SM IPPROTO_UDPor .B.SM IPPROTO_TCP).The procedure.I dispatchhas the following form:.RS 1i.ft B.nfdispatch(request, xprt)struct svc_req *request;\s-1SVCXPRT\s0 *xprt;.ft R.fi.RE.IPThe.B svc_register(\|)routine returns one if it succeeds, and zero otherwise..br.if t .ne 6.LP.ft B.nf.sp .5svc_run(\|).fi.ft R.IPThis routine never returns. It waits for.SM RPCrequests to arrive, and calls the appropriate serviceprocedure using.B svc_getreq(\|)when one arrives. This procedure is usually waiting for a.B select(\|)system call to return..br.if t .ne 9.LP.ft B.nf.sp .5svc_sendreply(xprt, outproc, out)\s-1SVCXPRT\s0 *xprt;xdrproc_t outproc;char *out;.fi.ft R.IPCalled by an.SM RPCservice's dispatch routine to send the results of aremote procedure call.  The parameter.I xprtis the request's associated transport handle;.I outprocis the.SM XDRroutine which is used to encode the results; and.I outis the address of the results.This routine returns one if it succeeds, zero otherwise..br.if t .ne 7.LP.ft B.nf.sp .5voidsvc_unregister(prognum, versnum)u_long prognum, versnum;.fi.ft R.IPRemove all mapping of the double.RI [ prognum , versnum ]to dispatch routines, and of the triple.RI [ prognum , versnum , *\fR]to port number..br.if t .ne 9.LP.ft B.nf.sp .5voidsvcerr_auth(xprt, why)\s-1SVCXPRT\s0 *xprt;enum auth_stat why;.fi.ft R.IPCalled by a service dispatch routine that refuses to performa remote procedure call due to an authentication error..br.if t .ne 7.LP.ft B.nf.sp .5voidsvcerr_decode(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPCalled by a service dispatch routine that cannot successfullydecode its parameters. See also.BR svc_getargs(\|) ..br.if t .ne 7.LP.ft B.nf.sp .5voidsvcerr_noproc(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPCalled by a service dispatch routine that does not implementthe procedure number that the caller requests..br.if t .ne 7.LP.ft B.nf.sp .5voidsvcerr_noprog(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPCalled when the desired program is not registered with the.SM RPCpackage. Service implementors usually do not need this routine..br.if t .ne 7.LP.ft B.nf.sp .5voidsvcerr_progvers(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPCalled when the desired version of a program is not registeredwith the.SM RPCpackage. Service implementors usually do not need this routine..br.if t .ne 7.LP.ft B.nf.sp .5voidsvcerr_systemerr(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPCalled by a service dispatch routine when it detects a systemerrornot covered by any particular protocol.For example, if a service can no longer allocate storage,it may call this routine..br.if t .ne 8.LP.ft B.nf.sp .5voidsvcerr_weakauth(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPCalled by a service dispatch routine that refuses to performa remote procedure call due to insufficientauthentication parameters.  The routine calls.BR "svcerr_auth(xprt, \s-1AUTH_TOOWEAK\s0)" ..br.if t .ne 11.LP.ft B.nf.sp .5\s-1SVCXPRT\s0 *svcraw_create(\|).fi.ft R.IPThis routine creates a toy.SM RPCservice transport, to which it returns a pointer.  Thetransportis really a buffer within the process's address space,so the corresponding.SM RPCclient should live in the sameaddress space;see.BR clntraw_create(\|) .This routine allows simulation of.SM RPCand acquisition of.SM RPCoverheads (such as round trip times), without any kernelinterference.This routine returns.SM NULLif it fails..br.if t .ne 11.LP.ft B.nf.sp .5\s-1SVCXPRT\s0 *svctcp_create(sock, send_buf_size, recv_buf_size)int sock;u_int send_buf_size, recv_buf_size;.fi.ft R.IPThis routine creates a.SM TCP/IP\s0-based.SM RPCservice transport, to which it returns a pointer.The transport is associated with the socket.IR sock ,which may be.BR \s-1RPC_ANYSOCK\s0 ,in which case a new socket is created.If the socket is not bound to a local.SM TCPport, then this routine binds it to an arbitrary port.  Uponcompletion,\fB\%xprt\->xp_sock\fRis the transport's socket descriptor, and\fB\%xprt\->xp_port\fRis the transport's port number.This routine returns.SM NULLif it fails. Since.SM TCP\s0-based.SM RPCuses buffered.SM I/O ,users may specify the size of buffers; values of zerochoose suitable defaults..br.if t .ne 11.LP.ft B.nf.sp .5\s-1SVCXPRT\s0 *svcfd_create(fd, sendsize, recvsize)int fd;u_int sendsize;u_int recvsize;.fi.ft R.IPCreate a service on top of any open descriptor. Typically,thisdescriptor is a connected socket for a stream protocol suchas.SM TCP\s0..I sendsizeand.I recvsizeindicate sizes for the send and receive buffers.  If they arezero, a reasonable default is chosen..br.if t .ne 10.LP.ft B.nf.sp .5\s-1SVCXPRT\s0 *svcudp_bufcreate(sock, sendsize, recosize)int sock;.fi.ft R.IPThis routine creates a.SM UDP/IP\s0-based.SM RPCservice transport, to which it returns a pointer.The transport is associated with the socket.IR sock ,which may be.B \s-1RPC_ANYSOCK\s0 ,in which case a new socket is created.If the socket is not bound to a local.SM UDPport, then this routine binds it to an arbitrary port. Uponcompletion,\fB\%xprt\->xp_sock\fRis the transport's socket descriptor, and\fB\%xprt\->xp_port\fRis the transport's port number.This routine returns.SM NULLif it fails..IPThis allows the user to specify the maximun packet size for sending and receiving.SM UDP\s0-based.SM RPC messages..br.if t .ne 7.LP.ft B.nf.sp .5xdr_accepted_reply(xdrs, ar)\s-1XDR\s0 *xdrs;struct accepted_reply *ar;.fi.ft R.IPUsed for encoding.SM RPCreply messages. This routine is useful for users whowish to generate\s-1RPC\s0-stylemessages without using the.SM RPCpackage..br.if t .ne 7.LP.ft B.nf.sp .5xdr_authunix_parms(xdrs, aupp)\s-1XDR\s0 *xdrs;struct authunix_parms *aupp;.fi.ft R.IPUsed for describing.SM UNIXcredentials. This routine is useful for userswho wish to generate these credentials without using the.SM RPCauthentication package..br.if t .ne 7.LP.ft B.nf.sp .5voidxdr_callhdr(xdrs, chdr)\s-1XDR\s0 *xdrs;struct rpc_msg *chdr;.fi.ft R.IPUsed for describing.SM RPCcall header messages.This routine is useful for users who wish to generate.SM RPC\s0-stylemessages without using the.SM RPCpackage..br.if t .ne 7.LP.ft B.nf.sp .5xdr_callmsg(xdrs, cmsg)\s-1XDR\s0 *xdrs;struct rpc_msg *cmsg;.fi.ft R.IPUsed for describing.SM RPCcall messages.This routine is useful for users who wish to generate.SM RPC\s0-stylemessages without using the.SM RPCpackage..br.if t .ne 7.LP.ft B.nf.sp .5xdr_opaque_auth(xdrs, ap)\s-1XDR\s0 *xdrs;struct opaque_auth *ap;.fi.ft R.IPUsed for describing.SM RPCauthentication information messages.This routine is useful for users who wish to generate.SM RPC\s0-stylemessages without using the.SM RPCpackage..br.if t .ne 7.LP.ft B.nf.sp .5xdr_pmap(xdrs, regs)\s-1XDR\s0 *xdrs;struct pmap *regs;.fi.ft R.IPUsed for describing parameters to various.B portmapprocedures, externally.This routine is useful for users who wish to generatethese parameters without using the.B pmapinterface..br.if t .ne 7.LP.ft B.nf.sp .5xdr_pmaplist(xdrs, rp)\s-1XDR\s0 *xdrs;struct pmaplist **rp;.fi.ft R.IPUsed for describing a list of port mappings, externally.This routine is useful for users who wish to generatethese parameters without using the.B pmapinterface..br.if t .ne 7.LP.ft B.nf.sp .5xdr_rejected_reply(xdrs, rr)\s-1XDR\s0 *xdrs;struct rejected_reply *rr;.fi.ft R.IPUsed for describing.SM RPCreply messages.This routine is useful for users who wish to generate.SM RPC\s0-stylemessages without using the.SM RPCpackage..br.if t .ne 8.LP.ft B.nf.sp .5xdr_replymsg(xdrs, rmsg)\s-1XDR\s0 *xdrs;struct rpc_msg *rmsg;.fi.ft R.IPUsed for describing.SM RPCreply messages.This routine is useful for users who wish to generate.SM RPCstyle messages without using the.SM RPCpackage..br.if t .ne 8.LP.ft B.nf.sp .5voidxprt_register(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPAfter.SM RPCservice transport handles are created,they should register themselves with the.SM RPCservice package.This routine modifies the global variable.BR svc_fds(\|) .Service implementors usually do not need this routine..br.if t .ne 8.LP.ft B.nf.sp .5voidxprt_unregister(xprt)\s-1SVCXPRT\s0 *xprt;.fi.ft R.IPBefore an.SM RPCservice transport handle is destroyed,it should unregister itself with the.SM RPCservice package.This routine modifies the global variable.BR svc_fds(\|) .Service implementors usually do not need this routine..SH SEE ALSO.BR rpc_secure (3N),.BR xdr (3N).brThe following manuals:.RS.ft IRemote Procedure Calls: Protocol Specification.brRemote Procedure Call Programming Guide.brrpcgen Programming Guide.br.ft R.RE.IR "\s-1RPC\s0: Remote Procedure Call Protocol Specification" ,.SM RFC1050, Sun Microsystems, Inc.,.SM USC-ISI\s0.

⌨️ 快捷键说明

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