Print this page
8112 EOF crazier RPC daemons
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man3socket/spray.3socket
+++ new/usr/src/man/man3rpc/spray.3rpc
1 1 '\" te
2 2 .\" Copyright 1989 AT&T Copyright (c) 1997, Sun Microsystems, Inc. All Rights Reserved
3 3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
4 4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
5 5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
6 -.TH SPRAY 3SOCKET "Dec 30, 1996"
6 +.TH SPRAY 3RPC "Apr 13, 2017"
7 7 .SH NAME
8 8 spray \- scatter data in order to test the network
9 9 .SH SYNOPSIS
10 10 .LP
11 11 .nf
12 -\fBcc\fR [ \fIflag\fR ... ] \fIfile\fR ... \fB-lsocket\fR \fB -lnsl \fR [ \fIlibrary\fR ... ]
12 +\fBcc\fR [ \fIflag\fR ... ] \fIfile\fR ... \fB-lsocket\fR \fB-lnsl\fR \
13 +\fB-lrpcsvc\fR [ \fIlibrary\fR ... ]
13 14 #include <rpcsvc/spray.h>
14 15
15 16 \fBbool_t\fR \fBxdr_sprayarr\fR(\fBXDR *\fR\fIxdrs\fR, \fBsprayarr *\fR\fIobjp\fR);
16 17 .fi
17 18
18 19 .LP
19 20 .nf
20 21 \fBbool_t\fR \fBxdr_spraycumul\fR(\fBXDR *\fR\fIxdrs\fR, \fBspraycumul *\fR\fIobjp\fR);
21 22 .fi
22 23
23 24 .SH DESCRIPTION
24 -.sp
25 25 .LP
26 26 The spray program sends packets to a given machine to test communications with
27 27 that machine.
28 28 .sp
29 29 .LP
30 30 The spray program is not a C function interface, per se, but it can be accessed
31 31 using the generic remote procedure calling interface \fBclnt_call()\fR. See
32 32 \fBrpc_clnt_calls\fR(3NSL). The program sends a packet to the called host. The
33 33 host acknowledges receipt of the packet. The program counts the number of
34 34 acknowledgments and can return that count.
35 35 .sp
36 36 .LP
37 37 The spray program currently supports the following procedures, which should be
38 38 called in the order given:
39 39 .sp
40 40 .ne 2
41 41 .na
42 42 \fB\fBSPRAYPROC_CLEAR\fR\fR
43 43 .ad
44 44 .RS 19n
45 45 This procedure clears the counter.
46 46 .RE
47 47
48 48 .sp
49 49 .ne 2
50 50 .na
51 51 \fB\fBSPRAYPROC_SPRAY\fR\fR
52 52 .ad
53 53 .RS 19n
54 54 This procedure sends the packet.
55 55 .RE
56 56
57 57 .sp
58 58 .ne 2
59 59 .na
60 60 \fB\fBSPRAYPROC_GET\fR\fR
61 61 .ad
62 62 .RS 19n
63 63 This procedure returns the count and the amount of time since the last
64 64 \fBSPRAYPROC_CLEAR\fR.
65 65 .RE
66 66
67 67 .SH EXAMPLES
68 68 .LP
69 69 \fBExample 1 \fRUsing \fBspray()\fR
70 70 .sp
71 71 .LP
72 72 The following code fragment demonstrates how the spray program is used:
73 73
74 74 .sp
75 75 .in +2
76 76 .nf
77 77 #include <rpc/rpc.h>
78 78 #include <rpcsvc/spray.h>
79 79 . . .
80 80 spraycumul spray_result;
81 81 sprayarr spray_data;
82 82 char buf[100]; /* arbitrary data */
83 83 int loop = 1000;
84 84 CLIENT *clnt;
85 85 struct timeval timeout0 = {0, 0};
86 86 struct timeval timeout25 = {25, 0};
87 87 spray_data.sprayarr_len = (uint_t)100;
88 88 spray_data.sprayarr_val = buf;
89 89 clnt = clnt_create("somehost", SPRAYPROG, SPRAYVERS, "netpath");
90 90 if (clnt == (CLIENT *)NULL) {
91 91 /* handle this error */
92 92 }
93 93 if (clnt_call(clnt, SPRAYPROC_CLEAR,
94 94 xdr_void, NULL, xdr_void, NULL, timeout25)) {
95 95 /* handle this error */
96 96 }
97 97 while (loop\(mi > 0) {
98 98 if (clnt_call(clnt, SPRAYPROC_SPRAY,
99 99 xdr_sprayarr, &spray_data, xdr_void, NULL, timeout0)) {
100 100 /* handle this error */
101 101 }
102 102 }
103 103 if (clnt_call(clnt, SPRAYPROC_GET,
104 104 xdr_void, NULL, xdr_spraycumul, &spray_result, timeout25)) {
↓ open down ↓ |
70 lines elided |
↑ open up ↑ |
105 105 /* handle this error */
106 106 }
107 107 printf("Acknowledged %ld of 1000 packets in %d secs %d usecs\en",
108 108 spray_result.counter,
109 109 spray_result.clock.sec,
110 110 spray_result.clock.usec);
111 111 .fi
112 112 .in -2
113 113
114 114 .SH ATTRIBUTES
115 -.sp
116 115 .LP
117 116 See \fBattributes\fR(5) for descriptions of the following attributes:
118 117 .sp
119 118
120 119 .sp
121 120 .TS
122 121 box;
123 122 c | c
124 123 l | l .
125 124 ATTRIBUTE TYPE ATTRIBUTE VALUE
126 125 _
127 126 MT-Level Unsafe
128 127 .TE
129 128
130 129 .SH SEE ALSO
131 -.sp
132 130 .LP
133 -\fBspray\fR(1M), \fBrpc_clnt_calls\fR(3NSL), \fBattributes\fR(5)
131 +\fBrpc_clnt_calls\fR(3NSL), \fBattributes\fR(5)
134 132 .SH NOTES
135 -.sp
136 133 .LP
137 134 This interface is unsafe in multithreaded applications. Unsafe interfaces
138 135 should be called only from the main thread.
139 136 .sp
140 137 .LP
141 138 A spray program is not useful as a networking benchmark as it uses unreliable
142 139 connectionless transports, for example, udp. It can report a large number of
143 140 packets dropped, when the drops were caused by the program sending packets
144 141 faster than they can be buffered locally, that is, before the packets get to
145 142 the network medium.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX