* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			444 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			444 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" @(#)rpc_clnt_create.3n 1.36 93/08/31 SMI; from SVr4
 | 
						|
.\" Copyright 1989 AT&T
 | 
						|
.\" @(#)rpc_clnt_create 1.5 89/07/24 SMI;
 | 
						|
.\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved.
 | 
						|
.\"	$NetBSD: rpc_clnt_create.3,v 1.12 2011/05/17 03:35:39 enami Exp $
 | 
						|
.Dd May 23, 2009
 | 
						|
.Dt RPC_CLNT_CREATE 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm rpc_clnt_create ,
 | 
						|
.Nm clnt_control ,
 | 
						|
.Nm clnt_create ,
 | 
						|
.Nm clnt_create_vers ,
 | 
						|
.Nm clnt_destroy ,
 | 
						|
.Nm clnt_dg_create ,
 | 
						|
.Nm clnt_pcreateerror ,
 | 
						|
.Nm clnt_raw_create ,
 | 
						|
.Nm clnt_spcreateerror ,
 | 
						|
.Nm clnt_tli_create ,
 | 
						|
.Nm clnt_tp_create ,
 | 
						|
.Nm clnt_vc_create ,
 | 
						|
.Nm rpc_createerr
 | 
						|
.Nd "library routines for dealing with creation and manipulation of CLIENT handles"
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libc
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In rpc/rpc.h
 | 
						|
.Ft bool_t
 | 
						|
.Fn clnt_control "CLIENT *clnt" "const u_int req" "char *info"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_create "const char * host" "const rpcprog_t prognum" "const rpcvers_t versnum" "const char *nettype"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_create_vers "const char * host" "const rpcprog_t prognum" "rpcvers_t *vers_outp" "const rpcvers_t vers_low" "const rpcvers_t vers_high" "char *nettype"
 | 
						|
.Ft void
 | 
						|
.Fn clnt_destroy "CLIENT * clnt"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_dg_create "const int fildes" "const struct netbuf *svcaddr" "const rpcprog_t prognum" "const rpcvers_t versnum" "const u_int sendsz" "const u_int recvsz"
 | 
						|
.Ft void
 | 
						|
.Fn clnt_pcreateerror "const char *s"
 | 
						|
.Ft "char *"
 | 
						|
.Fn clnt_spcreateerror "const char *s"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_raw_create "const rpcprog_t prognum" "const rpcvers_t versnum"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_tli_create "const int fildes" "const struct netconfig *netconf" "const struct netbuf *svcaddr" "const rpcprog_t prognum" "const rpcvers_t versnum" "const u_int sendsz" "const u_int recvsz"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_tp_create "const char * host" "const rpcprog_t prognum" "const rpcvers_t versnum" "const struct netconfig *netconf"
 | 
						|
.Ft "CLIENT *"
 | 
						|
.Fn clnt_vc_create "const int fildes" "const struct netbuf *svcaddr" "const rpcprog_t prognum" "const rpcvers_t versnum" "const u_int sendsz" "const u_int recvsz"
 | 
						|
.Sh DESCRIPTION
 | 
						|
RPC library routines allow C language programs to make procedure
 | 
						|
calls on other machines across the network.
 | 
						|
First a
 | 
						|
.Dv CLIENT
 | 
						|
handle is created and then the client calls a procedure to send a
 | 
						|
request to the server.
 | 
						|
On receipt of the request, the server calls a dispatch routine
 | 
						|
to perform the requested service, and then sends a reply.
 | 
						|
.Sh ROUTINES
 | 
						|
.Bl -tag -width YYYYYYY
 | 
						|
.It Fn clnt_control
 | 
						|
A function macro to change or retrieve various information
 | 
						|
about a client object.
 | 
						|
.Fa req
 | 
						|
indicates the type of operation, and
 | 
						|
.Fa info
 | 
						|
is a pointer to the information.
 | 
						|
For both connectionless and connection-oriented transports,
 | 
						|
the supported values of
 | 
						|
.Fa req
 | 
						|
and their argument types and what they do are:
 | 
						|
.Bl -column "CLSET_FD_NCLOSE" "struct timeval *" "set total timeout"
 | 
						|
.It Dv CLSET_TIMEOUT Ta "struct timeval *" Ta "set total timeout"
 | 
						|
.It Dv CLGET_TIMEOUT Ta "struct timeval *" Ta "get total timeout"
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
Note:
 | 
						|
if you set the timeout using
 | 
						|
.Fn clnt_control ,
 | 
						|
the timeout argument passed by
 | 
						|
.Fn clnt_call
 | 
						|
is ignored in all subsequent calls.
 | 
						|
.Pp
 | 
						|
Note:
 | 
						|
If you set the timeout value to 0
 | 
						|
.Fn clnt_control
 | 
						|
immediately returns an error
 | 
						|
.Pq Dv RPC_TIMEDOUT .
 | 
						|
Set the timeout parameter to 0 for batching calls.
 | 
						|
.Bl -column CLSET_FD_NCLOSE "struct timeval *" "do not close fd on destroy"
 | 
						|
.It Dv CLGET_SVC_ADDR Ta "struct netbuf *" Ta "get servers address"
 | 
						|
.It Dv CLGET_FD Ta "int *" Ta "get fd from handle"
 | 
						|
.It Dv CLSET_FD_CLOSE Ta "void" Ta "close fd on destroy"
 | 
						|
.It Dv CLSET_FD_NCLOSE Ta void Ta "don't close fd on destroy"
 | 
						|
.It Dv CLGET_VERS Ta "unsigned long *" Ta "get RPC program version"
 | 
						|
.It Dv CLSET_VERS Ta "unsigned long *" Ta "set RPC program version"
 | 
						|
.It Dv CLGET_XID Ta "unsigned long *" Ta "get XID of previous call"
 | 
						|
.It Dv CLSET_XID Ta "unsigned long *" Ta "set XID of next call"
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
The following operations are valid for connectionless transports only:
 | 
						|
.Bl -column CLSET_RETRY_TIMEOUT "struct timeval *" "set total timeout"
 | 
						|
.It Dv CLSET_RETRY_TIMEOUT Ta "struct timeval *" Ta "set the retry timeout"
 | 
						|
.It Dv CLGET_RETRY_TIMEOUT Ta "struct timeval *" Ta "get the retry timeout"
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
The retry timeout is the time that RPC
 | 
						|
waits for the server to reply before retransmitting the request.
 | 
						|
.Fn clnt_control
 | 
						|
returns
 | 
						|
.Dv TRUE
 | 
						|
on success and
 | 
						|
.Dv FALSE
 | 
						|
on failure.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_create
 | 
						|
Generic client creation routine for program
 | 
						|
.Fa prognum
 | 
						|
and version
 | 
						|
.Fa versnum .
 | 
						|
.Fa host
 | 
						|
identifies the name of the remote host where the server
 | 
						|
is located.
 | 
						|
.Fa nettype
 | 
						|
indicates the class of transport protocol to use.
 | 
						|
The transports are tried in left to right order in
 | 
						|
.Ev NETPATH
 | 
						|
environment variable or in top to bottom order in
 | 
						|
the netconfig database.
 | 
						|
.Fn clnt_create
 | 
						|
tries all the transports of the
 | 
						|
.Fa nettype
 | 
						|
class available from the
 | 
						|
.Ev NETPATH
 | 
						|
environment variable and the netconfig database,
 | 
						|
and chooses the first successful one.
 | 
						|
A default timeout is set and can be modified using
 | 
						|
.Fn clnt_control .
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
The
 | 
						|
.Fn clnt_pcreateerror
 | 
						|
routine can be used to print the reason for failure.
 | 
						|
.Pp
 | 
						|
Note:
 | 
						|
.Fn clnt_create
 | 
						|
returns a valid client handle even
 | 
						|
if the particular version number supplied to
 | 
						|
.Fn clnt_create
 | 
						|
is not registered with the
 | 
						|
.Xr rpcbind 8
 | 
						|
service.
 | 
						|
This mismatch will be discovered by a
 | 
						|
.Fn clnt_call
 | 
						|
later (see
 | 
						|
.Xr rpc_clnt_calls 3 ) .
 | 
						|
.Pp
 | 
						|
.It Fn clnt_create_vers
 | 
						|
Generic client creation routine which is similar to
 | 
						|
.Fn clnt_create
 | 
						|
but which also checks for the
 | 
						|
version availability.
 | 
						|
.Fa host
 | 
						|
identifies the name of the remote host where the server
 | 
						|
is located.
 | 
						|
.Fa nettype
 | 
						|
indicates the class transport protocols to be used.
 | 
						|
If the routine is successful it returns a client handle created for
 | 
						|
the highest version between
 | 
						|
.Fa vers_low
 | 
						|
and
 | 
						|
.Fa vers_high
 | 
						|
that is supported by the server.
 | 
						|
.Fa vers_outp
 | 
						|
is set to this value.
 | 
						|
That is, after a successful return
 | 
						|
.Fa vers_low
 | 
						|
\*[Le]
 | 
						|
.Fa *vers_outp
 | 
						|
\*[Le]
 | 
						|
.Fa vers_high .
 | 
						|
If no version between
 | 
						|
.Fa vers_low
 | 
						|
and
 | 
						|
.Fa vers_high
 | 
						|
is supported by the server then the routine fails and returns
 | 
						|
.Dv NULL .
 | 
						|
A default timeout is set and can be modified using
 | 
						|
.Fn clnt_control .
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
The
 | 
						|
.Fn clnt_pcreateerror
 | 
						|
routine can be used to print the reason for failure.
 | 
						|
Note:
 | 
						|
.Fn clnt_create
 | 
						|
returns a valid client handle even
 | 
						|
if the particular version number supplied to
 | 
						|
.Fn clnt_create
 | 
						|
is not registered with the
 | 
						|
.Xr rpcbind 8
 | 
						|
service.
 | 
						|
This mismatch will be discovered by a
 | 
						|
.Fn clnt_call
 | 
						|
later (see
 | 
						|
.Xr rpc_clnt_calls 3 ) .
 | 
						|
However,
 | 
						|
.Fn clnt_create_vers
 | 
						|
does this for you and returns a valid handle
 | 
						|
only if a version within
 | 
						|
the range supplied is supported by the server.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_destroy
 | 
						|
A function macro that destroys the client's RPC handle.
 | 
						|
Destruction usually involves deallocation
 | 
						|
of private data structures, including
 | 
						|
.Fa clnt
 | 
						|
itself.
 | 
						|
Use of
 | 
						|
.Fa clnt
 | 
						|
is undefined after calling
 | 
						|
.Fn clnt_destroy .
 | 
						|
If the RPC library opened the associated file descriptor, or
 | 
						|
.Dv CLSET_FD_CLOSE
 | 
						|
was set using
 | 
						|
.Fn clnt_control ,
 | 
						|
the file descriptor will be closed.
 | 
						|
The caller should call
 | 
						|
.Fn auth_destroy "clnt-\*[Gt]cl_auth"
 | 
						|
(before calling
 | 
						|
.Fn clnt_destroy )
 | 
						|
to destroy the associated
 | 
						|
.Dv AUTH
 | 
						|
structure (see
 | 
						|
.Xr rpc_clnt_auth 3 ) .
 | 
						|
.Pp
 | 
						|
.It Fn clnt_dg_create
 | 
						|
This routine creates an RPC client for the remote program
 | 
						|
.Fa prognum
 | 
						|
and version
 | 
						|
.Fa versnum ;
 | 
						|
the client uses a connectionless transport.
 | 
						|
The remote program is located at address
 | 
						|
.Fa svcaddr .
 | 
						|
The parameter
 | 
						|
.Fa fildes
 | 
						|
is an open and bound file descriptor.
 | 
						|
This routine will resend the call message in intervals of
 | 
						|
15 seconds until a response is received or until the
 | 
						|
call times out.
 | 
						|
The total time for the call to time out is specified by
 | 
						|
.Fn clnt_call
 | 
						|
(see
 | 
						|
.Fn clnt_call
 | 
						|
in
 | 
						|
.Xr rpc_clnt_calls 3 ) .
 | 
						|
The retry time out and the total time out periods can
 | 
						|
be changed using
 | 
						|
.Fn clnt_control .
 | 
						|
The user may set the size of the send and receive
 | 
						|
buffers with the parameters
 | 
						|
.Fa sendsz
 | 
						|
and
 | 
						|
.Fa recvsz ;
 | 
						|
values of 0 choose suitable defaults.
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_pcreateerror
 | 
						|
Print a message to standard error indicating
 | 
						|
why a client RPC handle could not be created.
 | 
						|
The message is prepended with the string
 | 
						|
.Fa s
 | 
						|
and a colon, and appended with a newline.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_spcreateerror
 | 
						|
Like
 | 
						|
.Fn clnt_pcreateerror ,
 | 
						|
except that it returns a string
 | 
						|
instead of printing to the standard error.
 | 
						|
A newline is not appended to the message in this case.
 | 
						|
Warning:
 | 
						|
returns a pointer to a buffer that is overwritten
 | 
						|
on each call.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_raw_create
 | 
						|
This routine creates an RPC
 | 
						|
client handle for the remote program
 | 
						|
.Fa prognum
 | 
						|
and version
 | 
						|
.Fa versnum .
 | 
						|
The transport used to pass messages to the service is
 | 
						|
a buffer within the process's address space,
 | 
						|
so the corresponding RPC
 | 
						|
server should live in the same address space;
 | 
						|
(see
 | 
						|
.Fn svc_raw_create
 | 
						|
in
 | 
						|
.Xr rpc_svc_create 3 ) .
 | 
						|
This allows simulation of RPC and measurement of
 | 
						|
RPC overheads, such as round trip times,
 | 
						|
without any kernel or networking interference.
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
.Fn clnt_raw_create
 | 
						|
should be called after
 | 
						|
.Fn svc_raw_create .
 | 
						|
.Pp
 | 
						|
.It Fn clnt_tli_create
 | 
						|
This routine creates an RPC
 | 
						|
client handle for the remote program
 | 
						|
.Fa prognum
 | 
						|
and version
 | 
						|
.Fa versnum .
 | 
						|
The remote program is located at address
 | 
						|
.Fa svcaddr .
 | 
						|
If
 | 
						|
.Fa svcaddr
 | 
						|
is
 | 
						|
.Dv NULL
 | 
						|
and it is connection-oriented, it is assumed that the file descriptor
 | 
						|
is connected.
 | 
						|
For connectionless transports, if
 | 
						|
.Fa svcaddr
 | 
						|
is
 | 
						|
.Dv NULL ,
 | 
						|
.Dv RPC_UNKNOWNADDR
 | 
						|
error is set.
 | 
						|
.Fa fildes
 | 
						|
is a file descriptor which may be open, bound and connected.
 | 
						|
If it is
 | 
						|
.Dv RPC_ANYFD ,
 | 
						|
it opens a file descriptor on the transport specified by
 | 
						|
.Fa netconf .
 | 
						|
If
 | 
						|
.Fa fildes
 | 
						|
is
 | 
						|
.Dv RPC_ANYFD
 | 
						|
and
 | 
						|
.Fa netconf
 | 
						|
is
 | 
						|
.Dv NULL ,
 | 
						|
a
 | 
						|
.Dv RPC_UNKNOWNPROTO
 | 
						|
error is set.
 | 
						|
If
 | 
						|
.Fa fildes
 | 
						|
is unbound, then it will attempt to bind the descriptor.
 | 
						|
The user may specify the size of the buffers with the parameters
 | 
						|
.Fa sendsz
 | 
						|
and
 | 
						|
.Fa recvsz ;
 | 
						|
values of 0 choose suitable defaults.
 | 
						|
Depending upon the type of the transport (connection-oriented
 | 
						|
or connectionless),
 | 
						|
.Fn clnt_tli_create
 | 
						|
calls appropriate client creation routines.
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
The
 | 
						|
.Fn clnt_pcreateerror
 | 
						|
routine can be used to print the reason for failure.
 | 
						|
The remote rpcbind
 | 
						|
service (see
 | 
						|
.Xr rpcbind 8 )
 | 
						|
is not consulted for the address of the remote
 | 
						|
service.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_tp_create
 | 
						|
Like
 | 
						|
.Fn clnt_create
 | 
						|
except
 | 
						|
.Fn clnt_tp_create
 | 
						|
tries only one transport specified through
 | 
						|
.Fa netconf .
 | 
						|
.Fn clnt_tp_create
 | 
						|
creates a client handle for the program
 | 
						|
.Fa prognum ,
 | 
						|
the version
 | 
						|
.Fa versnum ,
 | 
						|
and for the transport specified by
 | 
						|
.Fa netconf .
 | 
						|
Default options are set,
 | 
						|
which can be changed using
 | 
						|
.Fn clnt_control
 | 
						|
calls.
 | 
						|
The remote rpcbind service on the host
 | 
						|
.Fa host
 | 
						|
is consulted for the address of the remote service.
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
The
 | 
						|
.Fn clnt_pcreateerror
 | 
						|
routine can be used to print the reason for failure.
 | 
						|
.Pp
 | 
						|
.It Fn clnt_vc_create
 | 
						|
This routine creates an RPC
 | 
						|
client for the remote program
 | 
						|
.Fa prognum
 | 
						|
and version
 | 
						|
.Fa versnum ;
 | 
						|
the client uses a connection-oriented transport.
 | 
						|
The remote program is located at address
 | 
						|
.Fa svcaddr .
 | 
						|
The parameter
 | 
						|
.Fa fildes
 | 
						|
is an open and bound file descriptor.
 | 
						|
The user may specify the size of the send and receive buffers
 | 
						|
with the parameters
 | 
						|
.Fa sendsz
 | 
						|
and
 | 
						|
.Fa recvsz ;
 | 
						|
values of 0 choose suitable defaults.
 | 
						|
This routine returns
 | 
						|
.Dv NULL
 | 
						|
if it fails.
 | 
						|
The address
 | 
						|
.Fa svcaddr
 | 
						|
should not be
 | 
						|
.Dv NULL
 | 
						|
and should point to the actual address of the remote program.
 | 
						|
.Fn clnt_vc_create
 | 
						|
does not consult the remote rpcbind service for this information.
 | 
						|
.Pp
 | 
						|
.It struct rpc_createerr rpc_createerr;
 | 
						|
A global variable whose value is set by any RPC
 | 
						|
client handle creation routine
 | 
						|
that fails.
 | 
						|
It is used by the routine
 | 
						|
.Fn clnt_pcreateerror
 | 
						|
to print the reason for the failure.
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr rpc 3 ,
 | 
						|
.Xr rpc_clnt_auth 3 ,
 | 
						|
.Xr rpc_clnt_calls 3 ,
 | 
						|
.Xr rpcbind 8
 |