The registerrpc() call registers a procedure with the local Portmapper and creates a control structure to remember the server procedure and its XDR routine. The svc_run() call uses the control structure. Procedures registered using registerrpc() are accessed using the UDP transport layer.

Syntax

#include <rpc\rpc.h>

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

Parameters

prognum

versnum procnum procname inproc outproc

Note: You cannot use xdr_enum() as an argument to registerrpc(). See xdr_enum() for more information.

Return Values

The value 0 indicates success; the value -1 indicates an error.

Examples

#define RMTPROGNUM (u_long)0x3fffffffL#define RMTPROGVER (u_long)0x1
#define RMTPROCNUM (u_long)0x1

main()
 {
  int *rmtprog();

  /* register remote program with Portmapper */
  registerrpc(RMTPROGNUM, RMTPROGVER, RMTPROCNUM, rmtprog,
  xdr_int, xdr_int);

  /* infinite loop, waits for RPC request from client */
  svc_run();
  printf("Error: svc_run should never reach this point \n");
  exit(1);
 }

int *
rmtprog(inproc)          /* remote program */
int *inproc;

{
 int *outproc;
 ...
 /* Process request */
 ...
 return (outproc);
}

Related Calls


[Back] [Next]