clnt_freeres Macro

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

clnt_freeres Macro Exported from the libc Library

Purpose

Frees data that was allocated by the Remote Procedure Call/eXternal Data Representation (RPC/XDR) system.

Library

C Library (libc.a)

Syntax

#include <rpc/rpc.h>

clnt_freeres ( clnt,  outproc,  out)
CLIENT *clnt;
xdrpoc_t outproc;
char *out;

Description

The clnt_freeres macro frees data allocated by the RPC/XDR system. This data was allocated when the RPC/XDR system decoded the results of an RPC call.

Parameters

Item Description
clnt Points to the structure of the client handle.
outproc Specifies the XDR subroutine that describes the results in simple decoding primitives.
out Specifies the address where the results are placed.

clnt_freeres Macro Exported from the libnsl Library

Purpose

Frees data that was allocated by the Remote Procedure Call/eXternal Data Representation (RPC/XDR) system.

Library

Network Services Library (libnsl.a)

Syntax

#include <rpc/rpc.h>
bool_t clnt_freeres (clnt, outproc, out)
CLIENT *clnt;
xdrpoc_t outproc;
caddr_t out;

Description

The clnt_freeres macro frees data allocated by the RPC/XDR system. This data is allocated when the RPC/XDR system decoded the results of an RPC call. You must specify the address of the results along with the procedure to decode it.

Parameters

Item Description
clnt Points to the structure of the client handle.
outproc Specifies the XDR subroutine that describes the results in simple decoding primitives.
out Specifies the address where the results are placed.

Return Values

Item Description
1 successful
0 unsuccessful

Examples

#include <stdlib.h>
#include <rpc/rpc.h>
#include <sys/types.h>
#include <sys/select.h>
int main()
{

  rpcprog_t PROGNUM = 0x3fffffffL;
  rpcvers_t PROGVER = 0x1L;
  rpcproc_t procnum 0x1L;
  CLIENT *clnt;
  enum clnt_stat stat;
  struct timeval timeout = {25,0};
  char *nettype = "tcp";
  char hostname[255] ; /* The Remote Host */

  struct arguments{
     unsigned int size;
     char *data;
  };
  struct arguments input_arguments ;  
  struct arguments output_results  ;  

  if ((clnt=clnt_create(hostname, PROGNUM, PROGVER, nettype))==NULL)
  {
    fprintf(stderr,"clnt_create() subroutine failed");
    exit(1);
  }

  stat = clnt_call(clnt, procnum, (xdrproc_t)xdr_array,
           (char *)&input_arguments, (xdrproc_t)xdr_array,
           (char *)&output_results, timeout);

  if(!clnt_freeres(clnt, (xdrproc_t)xdr_array,(caddr_t )&output_results))
  {
    fprintf(stderr,"clnt_freeres failed");
  }
  
  /* Destroy client handle in the end */
  clnt_destroy(clnt);

  return 0;
}