rpc(3) Library Functions Manual rpc(3) rpc - (libc -lc) C . . . . . : typedef int bool_t; typedef typeof(bool_t (XDR *, void *, ...)) *xdrproc_t; typedef typeof(bool_t (caddr_t resp, struct sockaddr_in *raddr) *resultproc_t; AUTH CLIENT SVCXPRT XDR. void auth_destroy(AUTH *auth); auth. . auth auth_destroy(). AUTH *authnone_create(void); RPC . RPC. AUTH *authunix_create(char *host, uid_t uid, gid_t gid, int n, gid_t aup_gids[n]); RPC . host uid gid n aup_gids . . AUTH *authunix_create_default(void); authunix_create() . int callrpc(char *host, unsigned long prognum, unsigned long versnum, unsigned long procnum, xdrproc_t inproc, const char *in, xdrproc_t outproc, char *out); prognum versnum procnum host. in out inproc outproc . enum clnt_stat . clnt_perrno() . : UDP/IP clntudp_create() . . enum clnt_stat clnt_broadcast(unsigned long prognum, unsigned long versnum, unsigned long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, resultproc_t eachresult); callrpc() . eachresult() : eachresult(char *out, struct sockaddr_in *addr); out out clnt_broadcast() addr . eachresult() clnt_broadcast() . : . 1500 . enum clnt_stat clnt_call(CLIENT *clnt, unsigned long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout); procnum clnt RPC clnt_create(). in () out () inproc outproc tout . clnt_destroy(CLIENT *clnt); RPC . clnt . clnt clnt_destroy(). RPC . . CLIENT *clnt_create(const char *host, unsigned long prog, unsigned long vers, const char *proto); . host . proto . "udp" "tcp". clnt_control(). : UDP . RPC UDP 8 . bool_t clnt_control(CLIENT *cl, int req, char *info); . req info . UDP TCP req : CLSET_TIMEOUT struct timeval // CLGET_TIMEOUT struct timeval // : clnt_control() clnt_call() . CLGET_SERVER_ADDR struct sockaddr_in // get server's address UDP : CLSET_RETRY_TIMEOUT struct timeval // set the retry timeout CLGET_RETRY_TIMEOUT struct timeval // get the retry timeout "UDP RPC" . clnt_freeres(CLIENT * clnt, xdrproc_t outproc, char *out); RPC/XDR RPC. out outproc XDR . . void clnt_geterr(CLIENT *clnt, struct rpc_err *errp); errp. void clnt_pcreateerror(const char *s); RPC. s . clnt_create() clntraw_create() clnttcp_create() clntudp_create(). void clnt_perrno(enum clnt_stat stat); stat. callrpc(). clnt_perror(CLIENT *clnt, const char *s); RPC clnt . s . clnt_call(). char *clnt_spcreateerror(const char *s); clnt_pcreateerror() . : . char *clnt_sperrno(enum clnt_stat stat); clnt_perrno() RPC . . clnt_sperrno() clnt_perrno() ( ) printf(3) clnt_perrno(). : clnt_sperror() clnt_spcreateerror() clnt_sperrno() . char *clnt_sperror(CLIENT *rpch, const char *s); clnt_perror() ( clnt_sperrno()) . : . CLIENT *clntraw_create(unsigned long prognum, unsigned long versnum); RPC prognum versnum. RPC svcraw_create(). RPC RPC . NULL . CLIENT *clnttcp_create(struct sockaddr_in *addr, unsigned long prognum, unsigned long versnum, int *sockp, unsigned int sendsz, unsigned int recvsz); RPC prognum versnum TCP/IP . *addr. addr->sin_port ( portmap ). sockp RPC_ANYSOCK sockp. RPC TCP / sendsz recvsz . NULL . CLIENT *clntudp_create(struct sockaddr_in *addr, unsigned long prognum, unsigned long versnum, struct timeval wait, int *sockp); RPC prognum versnum UDP/IP . addr. addr->sin_port ( portmap ). sockp RPC_ANYSOCK sockp. UDP wait . clnt_call(). : RPC UDP 8 . CLIENT *clntudp_bufcreate(struct sockaddr_in *addr, unsigned long prognum, unsigned long versnum, struct timeval wait, int *sockp, unsigned int sendsize, unsigned int recosize); RPC prognum versnum UDP/IP . addr. addr->sin_port ( portmap ). sockp RPC_ANYSOCK sockp. UDP wait . clnt_call(). RPC UDP. void get_myaddress(struct sockaddr_in *addr); IP *addr /etc/hosts. htons(PMAPPORT). struct pmaplist *pmap_getmaps(struct sockaddr_in *addr); portmap RPC IP *addr. NULL. rpcinfo -p . unsigned short pmap_getport(struct sockaddr_in *addr, unsigned long prognum, unsigned long versnum, unsigned int protocol); portmap prognum versnum protocol. protocol IPPROTO_UDP IPPROTO_TCP. RPC portmap . rpc_createerr RPC. enum clnt_stat pmap_rmtcall(struct sockaddr_in *addr, unsigned long prognum, unsigned long versnum, unsigned long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout, unsigned long *portp); portmap portmap IP *addr RPC . *portp . callrpc() clnt_call(). "ping" . clnt_broadcast(). bool_t pmap_set(unsigned long prognum, unsigned long versnum, int protocol, unsigned short port); portmap [prognum,versnum,protocol] port portmap . protocol IPPROTO_UDP IPPROTO_TCP. . svc_register(). bool_t pmap_unset(unsigned long prognum, unsigned long versnum); portmap [prognum,versnum,*] ports portmap . . int registerrpc(unsigned long prognum, unsigned long versnum, unsigned long procnum, typeof(char *(char *)) *procname, xdrproc_t inproc, xdrproc_t outproc); procname RPC. prognum versnum procnum procname () procname () inproc outproc . -1 . : UDP/IP svcudp_create() . struct rpc_createerr rpc_createerr; RPC . clnt_pcreateerror() . void svc_destroy(SVCXPRT *xprt); RPC xprt. xprt . xprt . fd_set svc_fdset; RPC select(2). svc_run(). ( select(2)!) svc_getreqset() . int svc_fds; svc_fdset 32 . svc_fdset. svc_freeargs(SVCXPRT *xprt, xdrproc_t inproc, char *in); RPC/XDR svc_getargs(). 1 . svc_getargs(SVCXPRT *xprt, xdrproc_t inproc, char *in); RPC RPC xprt. in inproc XDR . . struct sockaddr_in *svc_getcaller(SVCXPRT *xprt); RPC xprt. void svc_getreqset(fd_set *rdfds); svc_run() . select(2) RPC RPC rdfds . rdfds. void svc_getreq(int rdfds); svc_getreqset() 32 . svc_getreqset(). bool_t svc_register(SVCXPRT *xprt, unsigned long prognum, unsigned long versnum, typeof(void (struct svc_req *, SVCXPRT *)) *dispatch, unsigned long protocol); prognum versnum dispatch. protocol portmap. protocol [prognum,versnum,protocol] xprt->xp_port portmap ( protocol IPPROTO_UDP IPPROTO_TCP). dispatch : dispatch(struct svc_req *request, SVCXPRT *xprt); svc_register() . void svc_run(void); . RPC svc_getreq() . select(2). bool_t svc_sendreply(SVCXPRT *xprt, xdrproc_t outproc, char *out); RPC . xprt outproc XDR out . . void svc_unregister(unsigned long prognum, unsigned long versnum); [prognum,versnum] [prognum,versnum,*] . void svcerr_auth(SVCXPRT *xprt, enum auth_stat why); . void svcerr_decode(SVCXPRT *xprt); . svc_getargs(). void svcerr_noproc(SVCXPRT *xprt); . void svcerr_noprog(SVCXPRT *xprt); RPC. . void svcerr_progvers(SVCXPRT *xprt, unsigned long low_vers, unsigned long high_vers); RPC. . void svcerr_systemerr(SVCXPRT *xprt); . . void svcerr_weakauth(SVCXPRT *xprt); . svcerr_auth(xprt, AUTH_TOOWEAK). SVCXPRT *svcfd_create(int fd, unsigned int sendsize, unsigned int recvsize); . TCP. sendsize recvsize . . SVCXPRT *svcraw_create(void); RPC . RPC clntraw_create(). RPC RPC ( ) . NULL . SVCXPRT *svctcp_create(int sock, unsigned int send_buf_size, unsigned int recv_buf_size); RPC TCP/IP . sock RPC_ANYSOCK . TCP . xprt->xp_sock xprt->xp_port . NULL . RPC TCP / . SVCXPRT *svcudp_bufcreate(int sock, unsigned int sendsize, unsigned int recosize); RPC UDP/IP . sock RPC_ANYSOCK . UDP . xprt->xp_sock xprt->xp_port . NULL . RPC UDP. SVCXPRT *svcudp_create(int sock); svcudp_bufcreate(sock,SZ,SZ) SZ. bool_t xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar); RPC. RPC RPC. bool_t xdr_authunix_parms(XDR *xdrs, struct authunix_parms *aupp); UNIX. RPC. void xdr_callhdr(XDR *xdrs, struct rpc_msg *chdr); RPC. RPC RPC. bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg); RPC. RPC RPC. bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap); RPC. RPC RPC. bool_t xdr_pmap(XDR *xdrs, struct pmap *regs); portmap . pmap. bool_t xdr_pmaplist(XDR *xdrs, struct pmaplist **rp); . pmap. bool_t xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr); RPC. RPC RPC. bool_t xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg); RPC. RPC RPC. void xprt_register(SVCXPRT *xprt); RPC RPC. svc_fds. . void xprt_unregister(SVCXPRT *xprt); RPC RPC. svc_fds. . attributes(7). +------------+------------------------------------+--------------------+ || | | +------------+------------------------------------+--------------------+ |auth_destroy()| | MT-Safe | |authnone_create()| | | |authunix_create()| | | |authunix_create_default()| | | |callrpc()| | | |clnt_broadcast()| | | |clnt_call()| | | |clnt_destroy()| | | |clnt_create()| | | |clnt_control()| | | |clnt_freeres()| | | |clnt_geterr()| | | |clnt_pcreateerror()| | | |clnt_perrno()| | | |clnt_perror()| | | |clnt_spcreateerror()| | | |clnt_sperrno()| | | |clnt_sperror()| | | |clntraw_create()| | | |clnttcp_create()| | | |clntudp_create()| | | |clntudp_bufcreate()| | | |get_myaddress()| | | |pmap_getmaps()| | | |pmap_getport()| | | |pmap_rmtcall()| | | |pmap_set()| | | |pmap_unset()| | | |registerrpc()| | | |svc_destroy()| | | |svc_freeargs()| | | |svc_getargs()| | | |svc_getcaller()| | | |svc_getreqset()| | | |svc_getreq()| | | |svc_register()| | | |svc_run()| | | |svc_sendreply()| | | |svc_unregister()| | | |svcerr_auth()| | | |svcerr_decode()| | | |svcerr_noproc()| | | |svcerr_noprog()| | | |svcerr_progvers()| | | |svcerr_systemerr()| | | |svcerr_weakauth()| | | |svcfd_create()| | | |svcraw_create()| | | |svctcp_create()| | | |svcudp_bufcreate()| | | |svcudp_create()| | | |xdr_accepted_reply()| | | |xdr_authunix_parms()| | | |xdr_callhdr()| | | |xdr_callmsg()| | | |xdr_opaque_auth()| | | |xdr_pmap()| | | |xdr_pmaplist()| | | |xdr_rejected_reply()| | | |xdr_replymsg()| | | |xprt_register()| | | |xprt_unregister()| | | +------------+------------------------------------+--------------------+ xdr(3) : : rpcgen RPC: RFC 1050 Sun Microsystems USC-ISI. 3 . . : . 6.18 21 2025 rpc(3)