svc_sendreply Subroutine

Important: The subroutine is exported from both the libc and the libnsl libraries.

svc_sendreply Subroutine Exported from the libc Library

Purpose

Sends back the results of a remote procedure call.

Library

C Library (libc.a)

Syntax

#include <rpc/rpc.h>

svc_sendreply ( xprt,  outproc,  out)
SVCXPRT *xprt;
xdrproc_t outproc;
char *out;

Description

The svc_sendreply subroutine sends back the results of a remote procedure call. This subroutine is called by a Remote Procedure Call (RPC) service dispatch subroutine.

Parameters

Item Description
xprt Points to the RPC service transport handle of the caller.
outproc Specifies the eXternal Data Representation (XDR) routine that encodes the results.
out Points to the address where results are placed.

Return Values

Upon successful completion, this subroutine returns a value of 1. If unsuccessful, it returns a value of 0.

svc_sendreply Subroutine Exported from the libnsl Library

Purpose

Sends back the results of a remote procedure call.

Library

Network Services Library (libnsl.a)

Syntax

#include <rpc/rpc.h>
bool_t svc_sendreply(xprt, oproc, output)
const SVCXPRT *xprt;
const xdrproc_t oproc;
caddr_t output;

Description

The svc_sendreply subroutine sends back the results of a remote procedure call (RPC). This subroutine is called by an RPC service dispatch subroutine. This subroutine encodes the result from a service procedure into the eXternal Data Representation (XDR) format with a specified XDR procedure, and then sends the procedure back to a client.

Parameters

Item Description
xprt Points to the RPC service transport handle of the caller.
oproc Specifies the eXternal Data Representation (XDR) routine that encodes the results.
output Points to the address where results are placed.

Return Values

Item Description
TRUE successful
FALSE unsuccessful

Examples

#include <rpc/rpc.h>
#include <stdlib.h>
#define PROG 0x3fffffffL
#define VERS 0x1L

static void sample_dispatch();
main()
{
  char *nettype;
  int no_of_handles;
  
  nettype = "tcp";
  /* Create RPC service handle and register with RPCBIND service */
  if((no_of_handles = svc_create(sample_dispatch, PROG, VERS,nettype)) == 0)
  {
    fprintf(stdout, " Error in svc_create ");
    exit(EXIT_FAILURE);
  }
  svc_run();
  return 0;
} 

/* following is the sample dispatch routine*/
static void sample_dispatch(struct svc_req *request, SVCXPRT *xprt)
{
  int result;

  /*  Some code to call appropriate service procedure.
   * Procedure will return its result. 
  */
  /* Send the result back to client */ 
  if(!svc_sendreply(xprt,(xdrproc_t)xdr_int,(caddr_t)&result))
  {
    fprintf(stdout, " Error in svc_create ");
    svcerr_systemerr(transp);
  }
}