RPC_SOC(3) | Library Functions Manual | RPC_SOC(3) |
void
auth_destroy(AUTH *auth);
AUTH *
authnone_create(void);
AUTH *
authunix_create(char *host, int uid, int gid, int len, int *aup_gids);
AUTH *
authunix_create_default(void);
int
callrpc(char *host, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out);
enum clnt_stat
clnt_broadcast(u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, resultproc_t eachresult);
enum clnt_stat
clnt_call(CLIENT *clnt, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout);
int
clnt_destroy(CLIENT *clnt);
CLIENT *
clnt_create(char *host, u_long prog, u_long vers, char *proto);
bool_t
clnt_control(CLIENT *cl, u_int req, char *info);
int
clnt_freeres(CLIENT *clnt, xdrproc_t outproc, char *out);
void
clnt_geterr(CLIENT *clnt, struct rpc_err errp);
void
clnt_pcreateerror(char *s);
void
clnt_perrno(enum clnt_stat stat);
int
clnt_perror(CLIENT *clnt, char *s);
char *
clnt_spcreateerror(const char *s);
char *
clnt_sperrno(enum clnt_stat stat);
char *
clnt_sperror(CLIENT *rpch, char *s);
CLIENT *
clntraw_create(u_long prognum, u_long versnum);
CLIENT *
clnttcp_create(struct sockaddr_in *addr, u_long prognum, u_long versnum, int *sockp, u_int sendsz, u_int recvsz);
CLIENT *
clntudp_create(struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int *sockp);
CLIENT *
clntudp_bufcreate(struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int *sockp, unsigned int sendsize, unsigned int recosize);
int
get_myaddress(struct sockaddr_in *addr);
struct pmaplist *
pmap_getmaps(struct sockaddr_in *addr);
u_short
pmap_getport(struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long protocol);
enum clnt_stat
pmap_rmtcall(struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrpoc_t outproc, char *out, struct timeval tout, u_long *portp);
int
pmap_set(u_long prognum, u_long versnum, int protocol, int port);
int
pmap_unset(u_long prognum, u_long versnum);
int
registerrpc(u_long prognum, u_long versnum, u_long procnum, char *(*procname)(), xdrproc_t inproc, xdrproc_t outproc);
struct rpc_createerr rpc_createerr;
int
svc_destroy(SVCXPRT *xprt);
fd_set svc_fdset;
int svc_fds;
int
svc_freeargs(SVCXPRT *xprt, xdrproc_t inproc, char *in);
int
svc_getargs(SVCXPRT *xprt, xdrproc_t inproc, char *in);
struct sockaddr_in *
svc_getcaller(SVCXPRT *xprt);
int
svc_getreqset(fd_set *rdfds);
int
svc_getreq(int rdfds);
struct netbuf *
svc_getrpccaller(SVCXPRT *xprt);
int
svc_register(SVCXPRT *xprt, u_long prognum, u_long versnum, void (*dispatch)(), u_long protocol);
int
svc_run(void);
int
svc_sendreply(SVCXPRT *xprt, xdrproc_t outproc, char *out);
void
svc_unregister(u_long prognum, u_long versnum);
void
svcerr_auth(SVCXPRT *xprt, enum auth_stat why);
void
svcerr_decode(SVCXPRT *xprt);
void
svcerr_noproc(SVCXPRT *xprt);
void
svcerr_noprog(SVCXPRT *xprt);
void
svcerr_progvers(SVCXPRT *xprt);
void
svcerr_systemerr(SVCXPRT *xprt);
void
svcerr_weakauth(SVCXPRT *xprt);
SVCXPRT *
svcraw_create(void);
SVCXPRT *
svctcp_create(int sock, u_int send_buf_size, u_int recv_buf_size);
SVCXPRT *
svcfd_create(int fd, u_int sendsize, u_int recvsize);
SVCXPRT *
svcudp_bufcreate(int sock, u_int sendsize, u_int recosize);
SVCXPRT *
svcudp_create(int sock);
int
xdr_accepted_reply(XDR *xdrs, struct accepted_reply *ar);
int
xdr_authunix_parms(XDR *xdrs, struct authunix_parms *aupp);
void
xdr_callhdr(XDR *xdrs, struct rpc_msg *chdr);
int
xdr_callmsg(XDR *xdrs, struct rpc_msg *cmsg);
int
xdr_opaque_auth(XDR *xdrs, struct opaque_auth *ap);
int
xdr_pmap(XDR *xdrs, struct pmap *regs);
int
xdr_pmaplist(XDR *xdrs, struct pmaplist **rp);
int
xdr_rejected_reply(XDR *xdrs, struct rejected_reply *rr);
int
xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg);
void
xprt_register(SVCXPRT *xprt);
void
xprt_unregister(SVCXPRT *xprt);
These routines allow C programs to make procedure calls on other machines across the network. First, the client calls a procedure to send a data packet to the server. Upon receipt of the packet, the server calls a dispatch routine to perform the requested service, and then sends back a reply. Finally, the procedure call returns to the client.
Warning: calling remote procedures with this routine uses UDP/IP as a transport; see clntudp_create() for restrictions. You do not have control of timeouts or authentication using this routine.
Warning: broadcast sockets are limited in size to the maximum transfer unit of the data link. For ethernet, this value is 1500 bytes.
Warning: Using UDP has its shortcomings. Since UDP-based RPC messages can only hold up to 8 Kbytes of encoded data, this transport cannot be used for procedures that take large arguments or return huge results.
Note: if you set the timeout using clnt_control(), the timeout parameter passed to clnt_call() will be ignored in all future calls.
The following operations are valid for UDP only:
The retry timeout is the time that UDP RPC waits for the server to reply before retransmitting the request.
Bugs: returns pointer to static data that is overwritten on each call.
clnt_sperrno() is used instead of clnt_perrno() if the program does not have a standard error (as a program running as a server quite likely does not), or if the programmer does not want the message to be output with printf(3), or if a message format different than that supported by clnt_perrno() is to be used. Note: unlike clnt_sperror() and clnt_spcreateerror(), clnt_sperrno() returns a pointer to static data, but the result will not get overwritten on each call.
Bugs: returns pointer to static data that is overwritten on each call.
Warning: since UDP-based RPC messages can only hold up to 8 Kbytes of encoded data, this transport cannot be used for procedures that take large arguments or return huge results.
This allows the user to specify the maximum packet size for sending and receiving UDP-based RPC messages.
uses this routine.rpcinfo -p
Warning: remote procedures registered in this form are accessed using the UDP/IP transport; see svcudp_bufcreate() for restrictions.
The svc_register() routine returns one if it succeeds, and zero otherwise.
This allows the user to specify the maximum packet size for sending and receiving UDP-based RPC messages.
The following manuals:
Remote Procedure Calls: Protocol Specification.
Remote Procedure Call Programming Guide.
rpcgen Programming Guide.
Sun Microsystems, Inc., USC-ISI, RPC: Remote Procedure Call Protocol Specification, RFC, 1050.
December 12, 2008 | NetBSD 6.1 |