SPRAY(3N-SVR4) RISC/os Reference Manual SPRAY(3N-SVR4)
NAME
spray - scatter data in order to check the network
SYNOPSIS
#include <rpcsvc/spray.h>
DESCRIPTION
The spray protocol sends packets to a given machine to test
the speed and reliability of communications with that
machine.
The spray protocol is not a C function interface, per se,
but can be accessed using the generic remote procedure cal-
ling interface clnt_call() [see rpc_clnt_calls(3N)]. The
protocol sends a packet to the called host. The host ack-
nowledges receipt of the packet. The protocol counts the
number of acknowledgments and can return that count.
The spray protocol currently supports the following pro-
cedures, which should be called in the order given:
SPRAYPROC_CLEAR This procedure clears the counter.
SPRAYPROC_SPRAY This procedure sends the packet.
SPRAYPROC_GET This procedure returns the count
and the amount of time since the
last SPRAYPROC_CLEAR.
The following XDR routines are available in librpcsvc:
xdr_sprayarr
xdr_spraycumul
EXAMPLE
The following code fragment demonstrates how the spray pro-
tocol is used:
#include <rpc/rpc.h>
#include <rpcsvc/spray.h>
. . .
spraycumul spray_result;
sprayarr spray_data;
char buf[100]; /* arbitrary data */
int loop = 1000;
CLIENT *clnt;
struct timeval timeout0 = {0, 0};
struct timeval timeout25 = {25, 0};
spray_data.sprayarr_len = (u_int)100;
spray_data.sprayarr_val = buf;
Printed 11/19/92 Page 1
SPRAY(3N-SVR4) RISC/os Reference Manual SPRAY(3N-SVR4)
clnt = clnt_create("somehost", SPRAYPROG, SPRAYVERS, "netpath");
if (clnt == (CLIENT *)NULL) {
/* handle this error */
}
if (clnt_call(clnt, SPRAYPROC_CLEAR,
xdr_void, NULL, xdr_void, NULL, timeout25)) {
/* handle this error */
}
while (loop-- > 0) {
if (clnt_call(clnt, SPRAYPROC_SPRAY,
xdr_sprayarr, &spray_data, xdr_void, NULL, timeout0)) {
/* handle this error */
}
}
if (clnt_call(clnt, SPRAYPROC_GET,
xdr_void, NULL, xdr_spraycumul, &spray_result, timeout25)) {
/* handle this error */
}
printf("Acknowledged %ld of 1000 packets in %d secs %d usecs\n",
spray_result.counter,
spray_result.clock.sec,
spray_result.clock.usec);
SEE ALSO
rpc_clnt_calls(3N), spray(1M), sprayd(1M).
Page 2 Printed 11/19/92