#include <rpc/rpc.h>
enum clnt_stat rpc_call(const char *host,
const u_long prognum,
const u_long versnum,
const u_log procnum,
const xdrproc_t inproc,
const char *in,
const xdrproc_t outproc,
char *out,
const char *nettype);
The rpc_call() API calls the remote procedure that is associated with prognum, versnum, and procnum on the machine, host. rpc_call() tries all the transports of the nettype class available from the netconfig database file, and chooses the first successful one. Transports are tried in top-to-bottom order in the netconfig database file. A default time-out is set and can be modified using clnt_control().
The caller of the rpc_call() API must have execute (*X) authority to the /etc directory and must have read (*R) authority to the netconfig file.
| RPC_SUCCESS (0) | Successful |
| Non-zero value | rpc_call() was not successful. The rpc_createerr global structure is set to indicate the error. |
Upon failure, rpc_call() sets the global structure rpc_createerr. The rpc_createerr.cf_stat variable has a status value that indicates the error reason. The rpc_createerr.cf_error.re_errno variable is meaningful when some status values are set.
The rpc_createerr.cf_stat variable can be set to one of the following values:
This API calls clnt_create() and clnt_call() APIs in order to perform its task. All error conditions from those APIs are inherited except RPC_FAILED from clnt_call().
| [RPC_SYSTEMERROR] | RPC error returned from system call. The
rpc_createerr.cf_error.re_errno variable can be set to one of the
following values:
|
| Message ID | Error Message Text |
|---|---|
| CPIA1B1 I | A problem was encountered in the RPC client. |
| CPIA1B2 I | TI-RPC encountered a problem in the transport protocol. |
| CPE3418 E | Possible APAR condition or hardware failure. |
| CPF3CF2 E | Error(s) occurred during running of &1 API. |
| CPF9872 E | Program or service program &1 in library &2 ended. Reason code &3. |
See Code disclaimer information for information pertaining to code examples.
The following example shows how rpc_call() is used:
/* Define remote program number and version */
#define RMTPROGNUM (u_long)0x3fffffffL
#define RMTPROGVER (u_long)0x1
#define RMTPROCNUM (u_long)0x1
#include <stdio.h>
#include <rpc/rpc.h>
main()
{
int inproc=100, outproc;
enum clnt_stat rstat;
...
/* Service request to host RPCSERVER_HOST */
if (rstat = rpc_call("as400.somewhere.ibm.com", RMTPROGNUM,
RMTPROGVER, RMTPROCNUM, xdr_int, (char *)&inproc,
xdr_int, (char *)&outproc, "VISIBLE")
!= RPC_SUCCESS){
fprintf(stderr,"rpc_call() failed\n");
exit(1);
}
...
}
| Top | Remote Procedure Call (RPC) APIs | APIs by category |