*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->IRIX man pages -> rpc (3c)              
Title
Content
Arch
Section
 

Contents


RPC(3R)								       RPC(3R)


NAME    [Toc]    [Back]

     rpc - Remote Procedure Call (RPC) library routines

SYNOPSIS AND DESCRIPTION    [Toc]    [Back]

     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.

	  #include <rpc/rpc.h>


	  void
	  auth_destroy(AUTH *auth)


	  A macro that destroys	the authentication information associated with
	  auth.	 Destruction usually involves deallocation of private data
	  structures. The use of auth is undefined after calling
	  auth_destroy().


	  AUTH *
	  authnone_create(void)


	  Create and returns an	RPC authentication handle that passes
	  nonusable authentication information with each remote	procedure
	  call.	This is	the default authentication used	by RPC.


	  AUTH *
	  authunix_create(const	char *host, int	uid,
	       int gid,	int len, int *aup_gids)


	  Create and return an RPC authentication handle that contains UNIX
	  authentication information.  The parameter host is the name of the
	  machine on which the information was created;	uid is the user's user
	  ID; gid is the user's	current	group ID; len and aup_gids refer to a
	  counted array	of groups to which the user belongs.  It is easy to
	  impersonate a	user.


	  AUTH *
	  authunix_create_default(void)


	  Call authunix_create() with the appropriate parameters.





									Page 1






RPC(3R)								       RPC(3R)



	  enum clnt_stat
	  callrpc(const	char *host, u_long prognum,
	       u_long versnum, u_long procnum,
	       xdrproc_t inproc, void *in,
	       xdrproc_t outproc, void *out)


	  Call the remote procedure associated with prognum, versnum, and
	  procnum on the machine, host.	 The parameter in is the address of
	  the procedure's argument(s), and out is the address of where to
	  place	the result(s); inproc is used to encode	the procedure's
	  parameters, and outproc is used to decode the	procedure's results.
	  This routine returns 0 if it succeeds, or the	value of enum
	  clnt_stat cast to an integer if it fails.  The routine clnt_perrno()
	  is handy for translating failure statuses into messages.

	  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.


	  enum clnt_stat
	  clnt_broadcast(u_long	prognum,
	      u_long versnum, u_long procnum,
	      xdrproc_t	inproc,	void *in,
	      xdrproc_t	outproc, void *out,
	      bool_t (*eachresult)(void	*, struct sockaddr_in *))


	  Like callrpc(), except the call message is broadcast to all locally
	  connected broadcast nets. Each time it receives a response, this
	  routine calls	eachresult(), whose form is:

	       bool_t
	       eachresult(void *out, struct sockaddr_in	*addr)

	  where	out is the same	as out passed to clnt_broadcast(), except that
	  the remote procedure's output	is decoded there; addr points to the
	  address of the machine that sent the results.	 If eachresult()
	  returns 0, clnt_broadcast() waits for	more replies; otherwise	it
	  returns with appropriate status.  Initially, it waits	4 seconds for
	  a response before retrying.  The next	wait interval is doubled until
	  it reaches a total wait time of 45 seconds.  See also
	  clnt_setbroadcastbackoff().

	  Warning: broadcast sockets are limited in size to the	maximum
	  transfer unit	of the data link.  For ethernet, this value is 1500
	  bytes.  For FDDI, this value is 4532 bytes.







									Page 2






RPC(3R)								       RPC(3R)



	  enum clnt_stat
	  clnt_broadcast_exp(u_long prognum,
	      u_long versnum, u_long procnum,
	      xdrproc_t	inproc,	void *in,
	      xdrproc_t	outproc, void *out,
	      bool_t (*eachresult)(void	*, struct sockaddr_in *),
	      int inittime, waittime)


	  Like clnt_broadcast(), except	you can	specify	the initial and	total
	  wait time.  See also clnt_setbroadcastbackoff().


	  enum clnt_stat
	  clnt_call(CLIENT *clnt, u_long procnum,
	       xdrproc_t inproc, void *in,
	       xdrproc_t outproc, void *out,
	       struct timeval tout)


	  A macro that calls the remote	procedure procnum associated with the
	  client handle, clnt, which is	obtained with an RPC client creation
	  routine such as clntudp_create().  The parameter in is the address
	  of the procedure's argument(s), and out is the address of where to
	  place	the result(s); inproc is used to encode	the procedure's
	  parameters, and outproc is used to decode the	procedure's results;
	  tout is the time allowed for results to come back.


	  void
	  clnt_control(CLIENT *clnt, u_int request, void *info)


	  A macro used to change or retrieve various information about a
	  client object.  request indicates the	type of	operation, and info is
	  a pointer to the information.	For both UDP and TCP, the supported
	  values of request and	their argument types and what they do are:

	  CLSET_TIMEOUT	      struct timeval	   set total timeout
	  CLGET_TIMEOUT	      struct timeval	   get total timeout
	  CLGET_SERVER_ADDR   struct sockaddr_in   get server's	address
	  CLGET_FD	      int		   get connection's file descriptor
	  CLSET_FD_CLOSE      (ignored)		   let clnt_destroy close fd
	  CLSET_FD_NCLOSE     (ignored)		   don't let clnt_destroy close	fd

	  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:
	  CLSET_RETRY_TIMEOUT	struct timeval	 set the retry timeout





									Page 3






RPC(3R)								       RPC(3R)



	  CLGET_RETRY_TIMEOUT	struct timeval	 get the retry timeout

	  The retry timeout is the time	that UDP RPC waits for the server to
	  reply	before retransmitting the request.

	  The following	operations are valid for TCP only:
	  CLSET_EINTR_RETURN   bool_t	set param to 1 to return on EINTR
	  CLGET_EINTR_RETURN   bool_t	get return on EINTR flag


	  CLIENT *
	  clnt_create(const char *host,	u_long prog, u_long vers,
	       const char *proto)


	  Generic client creation routine.  host identifies the	name of	the
	  remote host where the	server is located.  proto indicates which kind
	  of transport protocol	to use.	The currently supported	values for
	  this field are udp and tcp.  Default timeouts	are set, but can be
	  modified using clnt_control().

	  Warning: Using UDP has its shortcomings.  Since UDP-based RPC
	  messages can only hold up to 8 kilobytes of encoded data, this
	  transport cannot be used for procedures that take large arguments or
	  return huge results.


	  CLIENT *
	  clnt_create_vers(const char *host, u_long prog,
	       u_long *vers_out, u_long	vers_low,
	       u_long vers_high, const char *proto)


	  Generic client creation with version checking. The server must
	  support a version between vers_low and vers_high, inclusive.	An
	  error	results	if this	can not	be done.  The value of vers_out	is set
	  to the highest server-supported value.


	  void
	  clnt_destroy(CLIENT *clnt)


	  A macro that destroys	the client's RPC handle. Destruction usually
	  involves deallocation	of private data	structures, including clnt
	  itself.  Use of clnt is undefined after calling clnt_destroy().  If
	  the RPC library opened the associated	socket,	it will	close it also.
	  Otherwise, the socket	remains	open and it is the responsibility of
	  the caller to	close the socket.  Use the CLGET_FD request to
	  clnt_control() to obtain the descriptor or the CLSET_FD_CLOSE
	  request to have clnt_destroy() close it.




									Page 4






RPC(3R)								       RPC(3R)



	  bool_t
	  clnt_freeres(CLIENT *clnt, xdrproc_t outproc,	void *out)


	  A macro that frees any data allocated	by the RPC/XDR system when it
	  decoded the results of an RPC	call.  The parameter out is the
	  address of the results, and outproc is the XDR routine describing
	  the results.	This routine returns 1 if the results were
	  successfully freed, and 0 otherwise.


	  void
	  clnt_geterr(CLIENT *clnt, struct rpc_err *errp)


	  A macro that copies the error	structure out of the client handle to
	  the structure	at address errp.


	  void
	  clnt_pcreateerror(const char *s)


	  Print	a message to standard error indicating why a client RPC	handle
	  could	not be created.	 The message is	prepended with string s	and a
	  colon.  Used when a clnt_create(), clntraw_create(),
	  clnttcp_create(), or clntudp_create()	call fails.


	  void
	  clnt_perrno(enum clnt_stat stat)


	  Print	a message to standard error corresponding to the condition
	  indicated by stat.  Used after callrpc().


	  void
	  clnt_perror(CLIENT *clnt, const char *s)


	  Print	a message to standard error indicating why an RPC call failed;
	  clnt is the handle used to do	the call.  The message is prepended
	  with string s	and a colon.  Used after clnt_call().


	  void
	  clnt_setbroadcastbackoff(void	(*first)(struct	timeval	*tv),
	       int (*next)(struct timeval *tv))






									Page 5






RPC(3R)								       RPC(3R)



	  Set the timeout backoff iterator for clnt_broadcast().  The initial
	  timeout is stored in *tv by first().	Subsequent timeouts are
	  computed in *tv by next() , which returns 1 until a backoff limit is
	  reached, and thereafter returns 0.


	  char *
	  clnt_spcreateerror(const char	*s)


	  Like clnt_pcreateerror(), except that	it returns a string instead of
	  printing to the standard error.

	  Bugs:	returns	a pointer to static data that is overwritten on	each
	  call.


	  char *
	  clnt_sperrno(enum clnt_stat stat)


	  Take the same	arguments as clnt_perrno(), but	instead	of sending a
	  message to the standard error	indicating why an RPC call failed,
	  return a pointer to a	string which contains the message.  The	string
	  ends with a NEWLINE.

	  clnt_sperrno() is used instead of clnt_perrno() if the program does
	  not have a standard error (a server program quite likely does	not),
	  or if	the programmer does not	want the message to be output with
	  printf, or if	a message format different than	that supported by
	  clnt_perrno()	is to be used.

	  Note:	unlike clnt_sperror() and clnt_spcreaterror(), clnt_sperrno()
	  returns a pointer to static data, but	the result will	not get
	  overwritten on each call.


	  char *
	  clnt_sperror(CLIENT *clnt, const char	*s)


	  Like clnt_perror(), except that (like	clnt_sperrno())	it returns a
	  string instead of printing to	standard error.

	  Bugs:	returns	a pointer to static data that is overwritten on	each
	  call.


	  void
	  clnt_syslog(CLIENT *clnt, const char *s)





									Page 6






RPC(3R)								       RPC(3R)



	  Logs a LOG_ERR error to syslog(3) indicating why an RPC call failed;
	  clnt is the handle used to do	the call.  The message is prepended
	  with string s	and a colon.


	  CLIENT *
	  clntraw_create(u_long	prognum, u_long	versnum)


	  This routine creates a toy RPC client	for the	remote program
	  prognum, version versnum.  The transport used	to pass	messages to
	  the service is actually a buffer within the process's	address	space,
	  so the corresponding RPC server should live in the same address
	  space; see svcraw_create().  This allows simulation of RPC and
	  acquisition of RPC overheads,	such as	round trip times, without any
	  kernel interference. This routine returns NULL if it fails.


	  CLIENT *
	  clnttcp_create(struct	sockaddr_in *addr,
	       u_long prognum, u_long versnum,
	       int *sockp, u_int sendsize, u_int recvsize)


	  This routine creates an RPC client for the remote program prognum,
	  version versnum; the client uses TCP/IP as a transport. The remote
	  program is located at	Internet address *addr.	 If addr->sin_port is
	  0, then it is	set to the actual port that the	remote program is
	  listening on (the remote portmap service is consulted	for this
	  information).	The parameter sockp is a socket; if it is RPC_ANYSOCK,
	  then this routine opens a new	one and	sets sockp.  Since TCP-based
	  RPC uses buffered I/O	, the user may specify the size	of the send
	  and receive buffers with the parameters sendsize and recvsize;
	  values of 0 choose suitable defaults.	 This routine returns NULL if
	  it fails.


	  CLIENT *
	  clntudp_create(struct	sockaddr_in *addr,
	       u_long prognum, u_long versnum,
	       struct timeval wait, int	*sockp)


	  This routine creates an RPC client for the remote program prognum,
	  version versnum; the client uses use UDP/IP as a transport. The
	  remote program is located at Internet	address	addr.  If -
	  addr->sin_port is 0, then it is set to actual	port that the remote
	  program is listening on (the remote portmap service is consulted for
	  this information). The parameter sockp is a socket; if it is
	  RPC_ANYSOCK, then this routine opens a new one and sets sockp.  The
	  UDP transport	resends	the call message in intervals of wait time
	  until	a response is received or until	the call times out.  The total



									Page 7






RPC(3R)								       RPC(3R)



	  time for the call to time out	is specified by	clnt_call().

	  Warning: since UDP-based RPC messages	can only hold up to 8
	  kilobytes of encoded data, this transport cannot be used for
	  procedures that take large arguments or return huge results.


	  CLIENT *
	  clntudp_bufcreate(struct sockaddr_in *addr,
	       u_long prognum, u_long versnum,
	       struct timeval wait, int	*sockp,
	       u_int sendsize, u_int recvsize)


	  Like clntudp_create(), except	this call allows the user to specify
	  the maximum packet size for sending and receiving UDP-based RPC
	  messages.


	  void
	  get_myaddress(struct sockaddr_in *addr)


	  Stuff	the machine's IP address into *addr, without consulting	the
	  library routines that	deal with /etc/hosts.  The port	number is
	  always set to	htons(PMAPPORT).


	  struct pmaplist *
	  pmap_getmaps(addr)
	       struct sockaddr_in *addr;


	  A user interface to the portmap service, which returns a list	of the
	  current RPC program-to-port mappings on the host located at IP
	  address *addr.  This routine can return NULL.	 The command `rpcinfo
	  -p' uses this	routine.


	  u_short
	  pmap_getport(struct sockaddr_in *addr, u_long	prognum,
	       u_long versnum, u_int protocol)


	  A user interface to the portmap service, which returns the port
	  number on which waits	a service that supports	program	number
	  prognum, version versnum, and	speaks the transport protocol
	  associated with protocol.  The value of protocol is most likely
	  IPPROTO_UDP or IPPROTO_TCP.  A return	value of 0 means that the
	  mapping does not exist or that the RPC system	failured to contact
	  the remote portmap service.  In the latter case, the global variable
	  rpc_createerr() contains the RPC status.



									Page 8






RPC(3R)								       RPC(3R)



	  enum clnt_stat
	  pmap_rmtcall(struct sockaddr_in *addr,
	       u_long prognum, u_long versnum, u_long procnum,
	       xdrproc_t inproc, void *in,
	       xdrproc_t outproc, void *out,
	       struct timeval tout, u_long *portp)


	  A user interface to the portmap service, which instructs portmap on
	  the host at IP address *addr to make an RPC call on your behalf to a
	  procedure on that host.  The parameter *portp	will be	modified to
	  the program's	port number if the procedure succeeds. The definitions
	  of other parameters are discussed in callrpc() and clnt_call().
	  This procedure should	be used	for a ping and nothing else.  See also
	  clnt_broadcast().  pmap_settimeouts(), and pmap_setrmtcalltimeout().


	  bool_t
	  pmap_set(u_long prognum, u_long versnum,
	       u_long protocol,	u_short	port)


	  A user interface to the portmap service, which establishes a mapping
	  between the triple [prognum, versnum,	protocol] and port on the
	  machine's portmap service. The value of protocol is most likely
	  IPPROTO_UDP or IPPROTO_TCP.  This routine returns 1 if it succeeds,
	  0 otherwise.	Automatically done by svc_register().


	  void
	  pmap_setrmtcalltimeout(struct	timeval	intertry)


	  Set the retry	timeout	for pmap_rmtcall().  Note that the total
	  timeout per call is an argument to pmap_rmtcall().


	  void
	  pmap_settimeouts(struct timeval intertry,
	       struct timeval percall)


	  Set the retry	and total timeouts for RPCs to the portmapper.	These
	  timeouts are used explicitly by pmap_set() and pmap_getport(), and
	  implicitly by	clnt*_create().


	  bool_t
	  pmap_unset(u_long prognum, u_long versnum)






									Page 9






RPC(3R)								       RPC(3R)



	  A user interface to the portmap service, which destroys all mapping
	  between the triple [prognum, versnum,	*] and ports on	the machine's
	  portmap service. This	routine	returns	1 if it	succeeds, 0 otherwise.


	  int
	  registerrpc(u_long prognum,
	       u_long versnum, u_long procnum,
	       void *(*procname)(void *),
	       xdrproc_t inproc, xdrproc_t outproc)


	  Register procedure procname with the RPC service package.  If	a
	  request arrives for program prognum, version versnum,	and procedure
	  procnum, procname is called with a pointer to	its parameter(s);
	  progname should return a pointer to its static result(s); inproc is
	  used to decode the parameters	while outproc is used to encode	the
	  results.  This routine returns 0 if the registration succeeded, -1
	  otherwise.

	  Warning: remote procedures registered	in this	form are accessed
	  using	the UDP/IP transport; see svcudp_create() for restrictions.


	  struct rpc_createerr	   rpc_createerr


	  A global variable whose value	is set by any RPC client creation
	  routine that does not	succeed.  Use the routine clnt_pcreateerror()
	  to print the reason why.


	  void
	  _rpc_errorhandler(int	priority, const	char *format, ...)


	  Called by the	RPC library routines to	print an error message to
	  stderr or to syslog(3), if openlog(3)	was called. priority values
	  are defined in <syslog.h>.  format is	printf-like format string.
	  See comments in <rpc/errorhandler.h> for details on defining your
	  own version for more sophisticated error handling.


	  void
	  svc_destroy(SVCXPRT *xprt)


	  A macro that destroys	the RPC	service	transport handle, xprt.
	  Destruction usually involves deallocation of private data
	  structures, including	xprt itself.  Use of xprt is undefined after
	  calling this routine.




								       Page 10






RPC(3R)								       RPC(3R)



	  fd_set svc_fdset;


	  A global variable reflecting the RPC service side's read file
	  descriptor bit mask; it is suitable as a parameter to	the select(2)
	  system call. This is only of interest	if a service implementor does
	  not call svc_run(), in order to do asynchronous event	processing,
	  for example.	This variable is read-only (do not pass	its address to
	  select!), yet	it may change after calls to svc_getreqset() or	any
	  creation routines.


	  int svc_fds


	  Similar to svc_fdset,	but limited to 32 descriptors. This interface
	  is obsoleted by svc_fdset.


	  bool_t
	  svc_freeargs(SVCXPRT *xprt, xdrproc_t	inproc,	void *in)


	  A macro that frees any data allocated	by the RPC/XDR system when it
	  decoded the arguments	to a service procedure using svc_getargs().
	  This routine returns 1 if the	results	were successfully freed, and 0
	  otherwise.


	  bool_t
	  svc_getargs(SVCXPRT *xprt, xdrproc_t inproc, void *in)


	  A macro that decodes the arguments of	an RPC request associated with
	  the RPC service transport handle, xprt.  The parameter in is the
	  address where	the arguments will be placed; inproc is	the XDR
	  routine used to decode the arguments.	 This routine returns 1	if
	  decoding succeeds, and 0 otherwise.  Only after this routine is
	  called can the server	call fork(2) to	create a child process to
	  handle the request.


	  struct sockaddr_in *
	  svc_getcaller(SVCXPRT	*xprt)


	  The approved way of getting the network address of the caller	of a
	  procedure associated with the	RPC service transport handle, xprt.







								       Page 11






RPC(3R)								       RPC(3R)



	  void
	  svc_getreq(int rdfds)


	  This routine is provided for compatibility with old code.  Use
	  svc_getreqset	() when	developing new code.


	  void
	  svc_getreqset(fd_set *rdfds)


	  This routine is only of interest if a	service	implementor does not
	  call svc_run(), but instead implements custom	asynchronous event
	  processing.  It is called when the select(2) system call has
	  determined that an RPC request has arrived on	some RPC socket(s);
	  rdfds	is the resultant read file descriptor bit mask.	 The routine
	  returns when all sockets associated with the value of	rdfds have
	  been serviced.


	  bool_t
	  svc_register(SVCXPRT *xprt,
	      u_long prognum, u_long versnum,
	      void (*dispatch)(struct svc_req *,SVCXPRT	*),
	      int protocol)


	  Associates prognum and versnum with the service dispatch procedure,
	  dispatch.  If	protocol is 0, the service is not registered with the
	  portmap service.  If protocol	is non-zero, then a mapping of the
	  triple [prognum, versnum, protocol] to xprt->xp_port is established
	  with the local portmap service (generally protocol is	0, IPPROTO_UDP
	  or IPPROTO_TCP ).  The procedure dispatch has	the following form:

	       void
	       dispatch(struct svc_req *request, SVCXPRT *xprt)


	  The svc_register() routine returns 1 if it succeeds, and 0
	  otherwise.


	  void
	  svc_run(void)


	  This routine never returns. It waits for RPC requests	to arrive, and
	  calls	the appropriate	service	procedure using	svc_getreq() when one
	  arrives. This	procedure is usually waiting for a select() system
	  call to return.




								       Page 12






RPC(3R)								       RPC(3R)



	  bool_t
	  svc_sendreply(SVCXPRT	*xprt, xdrproc_t outproc, void *out)


	  Called by an RPC service's dispatch routine to send the results of a
	  remote procedure call.  The parameter	xprt is	the request's
	  associated transport handle; outproc is the XDR routine which	is
	  used to encode the results; and out is the address of	the results.
	  This routine returns 1 if it succeeds, 0 otherwise.


	  void
	  svc_unregister(u_long	prognum, u_long	versnum)


	  Remove all mapping of	the double [prognum, versnum] to dispatch
	  routines, and	of the triple [prognum,	versnum, *] to port number.


	  void
	  svc_versquiet(SVCXPRT	*xprt)


	  Tell the RPC library to not complain about version errors to the
	  client.  This	is useful when revving broadcast protocols that	sit on
	  a fixed address.


	  void
	  svcerr_auth(SVCXPRT *xprt, enum auth_stat why)


	  Called by a service dispatch routine that refuses to perform a
	  remote procedure call	due to an authentication error.


	  void
	  svcerr_decode(SVCXPRT	*xprt)


	  Called by a service dispatch routine that cannot successfully	decode
	  its parameters. See also svc_getargs().


	  void
	  svcerr_noproc(SVCXPRT	*xprt)


	  Called by a service dispatch routine that does not implement the
	  procedure number that	the caller requests.





								       Page 13






RPC(3R)								       RPC(3R)



	  void
	  svcerr_noprog(SVCXPRT	*xprt)


	  Called when the desired program is not registered with the RPC
	  package. Service implementors	usually	do not need this routine.


	  void
	  svcerr_progvers(SVCXPRT *xprt,
	       u_long low_vers,	u_long high_vers)


	  Called when the desired version of a program is not registered with
	  the RPC package. Service implementors	usually	do not need this
	  routine.


	  void
	  svcerr_systemerr(SVCXPRT *xprt)


	  Called by a service dispatch routine when it detects a system	error
	  not covered by any particular	protocol.  For example,	if a service
	  can no longer	allocate storage, it may call this routine.


	  void
	  svcerr_weakauth(SVCXPRT *xprt)


	  Called by a service dispatch routine that refuses to perform a
	  remote procedure call	due to insufficient authentication parameters.
	  The routine calls svcerr_auth(xprt, AUTH_TOOWEAK).


	  SVCXPRT *
	  svcraw_create(void)


	  This routine creates a toy RPC service transport, to which it
	  returns a pointer.  The transport is really a	buffer within the
	  process's address space, so the corresponding	RPC client should live
	  in the same address space; see clntraw_create().  This routine
	  allows simulation of RPC and acquisition of RPC overheads (such as
	  round	trip times), without any kernel	interference.  This routine
	  returns NULL if it fails.


	  SVCXPRT *
	  svctcp_create(int sock, u_int	sendsize, u_int	recvsize)




								       Page 14






RPC(3R)								       RPC(3R)



	  This routine creates a TCP/IP-based RPC service transport, to	which
	  it returns a pointer.	 The transport is associated with the socket
	  sock,	which may be RPC_ANYSOCK, in which case	a new socket is
	  created.  If the socket is not bound to a local TCP port, then this
	  routine binds	it to an arbitrary port.  Upon completion, -
	  xprt->xp_sock	is the transport's socket descriptor, and -
	  xprt->xp_port	is the transport's port	number.	 This routine returns
	  NULL if it fails. Since TCP-based RPC	uses buffered I/O, users may
	  specify the size of the send and receive buffers; values of 0	choose
	  suitable defaults.


	  SVCXPRT *
	  svcfd_create(int fd, u_int sendsize, u_int recvsize)


	  Create a service on top of any open descriptor. Typically, this
	  descriptor is	a connected socket for a stream	protocol such as TCP.
	  sendsize and recvsize	indicate sizes for the send and	receive
	  buffers.  If they are	zero, a	reasonable default is chosen.


	  SVCXPRT *
	  svcudp_bufcreate(int sock,
	       u_int sendsize, u_int recvsize)


	  This routine creates a UDP/IP-based RPC service transport, to	which
	  it returns a pointer.	 The transport is associated with the socket
	  sock,	which may be RPC_ANYSOCK, in which case	a new socket is
	  created.  If the socket is not bound to a local UDP port, then this
	  routine binds	it to an arbitrary port. Upon completion, -
	  xprt->xp_sock	is the transport's socket descriptor, and -
	  xprt->xp_port	is the transport's port	number.	 This routine returns
	  NULL if it fails.

	  This allows the user to specify the maximun packet size for sending
	  and receiving	UDP-based RPC messages.


	  SVCXPRT *
	  svcudp_create(int sock)


	  This routine creates a UDP/IP-based RPC service transport, to	which
	  it returns a pointer.	 The transport is associated with the socket
	  sock,	which may be RPC_ANYSOCK, in which case	a new socket is
	  created.  If the socket is not bound to a local UDP port, then this
	  routine binds	it to an arbitrary port. Upon completion,
	  xprt->xp_sock	is the transport's socket number, and xprt->xp_port is
	  the transport's port number.	This routine returns NULL if it	fails.




								       Page 15






RPC(3R)								       RPC(3R)



	  Warning: since UDP-based RPC messages	can only hold up to 8
	  kilobytes of encoded data, this transport cannot be used for
	  procedures that take large arguments or return huge results.


	  bool_t
	  xdr_accepted_reply(XDR *xdrs,	struct accepted_reply *ar)


	  Used for encoding RPC	reply messages.	This routine is	useful for
	  users	who wish to generate RPC-style messages	without	using the RPC
	  package.


	  bool_t
	  xdr_authunix_parms(XDR *xdrs,
	       struct authunix_parms *aupp)


	  Used for describing UNIX credentials.	This routine is	useful for
	  users	who wish to generate these credentials without using the RPC
	  authentication package.


	  bool_t
	  xdr_callhdr(XDR *xdrs, struct	rpc_msg	*chdr)


	  Used for describing RPC call header messages.	 This routine is
	  useful for users who wish to generate	RPC-style messages without
	  using	the RPC	package.


	  bool_t
	  xdr_callmsg(XDR *xdrs, struct	rpc_msg	*cmsg)


	  Used for describing RPC call messages.  This routine is useful for
	  users	who wish to generate RPC-style messages	without	using the RPC
	  package.


	  bool_t
	  xdr_opaque_auth(XDR *xdrs, struct opaque_auth	*ap)


	  Used for describing RPC authentication information messages.	This
	  routine is useful for	users who wish to generate RPC-style messages
	  without using	the RPC	package.






								       Page 16






RPC(3R)								       RPC(3R)



	  bool_t
	  xdr_pmap(XDR *xdrs, struct pmap *regs)


	  Used for describing parameters to various portmap procedures,
	  externally.  This routine is useful for users	who wish to generate
	  these	parameters without using the pmap interface.


	  bool_t
	  xdr_pmaplist(XDR *xdrs, struct pmaplist **rp)


	  Used for describing a	list of	port mappings, externally.  This
	  routine is useful for	users who wish to generate these parameters
	  without using	the pmap interface.


	  bool_t
	  xdr_rejected_reply(XDR *xdrs,	struct rejected_reply *rr)


	  Used for describing RPC reply	messages.  This	routine	is useful for
	  users	who wish to generate RPC-style messages	without	using the RPC
	  package.


	  bool_t
	  xdr_replymsg(XDR *xdrs, struct rpc_msg *rmsg)


	  Used for describing RPC reply	messages.  This	routine	is useful for
	  users	who wish to generate RPC style messages	without	using the RPC
	  package.


	  void
	  xprt_register(SVCXPRT	*xprt)


	  After	RPC service transport handles are created, they	should
	  register themselves with the RPC service package.  This routine
	  modifies the global variable svc_fds.	 Service implementors usually
	  do not need this routine.


	  void
	  xprt_unregister(SVCXPRT *xprt)







								       Page 17






RPC(3R)								       RPC(3R)



	  Before an RPC	service	transport handle is destroyed, it should
	  unregister itself with the RPC service package.  This	routine
	  modifies the global variable svc_fds.	 Service implementors usually
	  do not need this routine.

SEE ALSO    [Toc]    [Back]

      
      
     xdr(3R), IRIX Network Programming Guide.


								       PPPPaaaaggggeeee 11118888
[ Back ]
 Similar pages
Name OS Title
rpc_svc_err FreeBSD library routines for server side remote procedure call errors
authsys_create_default NetBSD library routines for client side remote procedure call authentication
svcerr_decode FreeBSD library routines for server side remote procedure call errors
svcerr_noproc FreeBSD library routines for server side remote procedure call errors
svcerr_noprog FreeBSD library routines for server side remote procedure call errors
svcerr_progvers FreeBSD library routines for server side remote procedure call errors
svcerr_systemerr FreeBSD library routines for server side remote procedure call errors
svcerr_weakauth FreeBSD library routines for server side remote procedure call errors
svcerr_systemerr NetBSD library routines for server side remote procedure call errors
rpc_svc_err IRIX library routines for server side remote procedure call errors
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service