mkfs, mkproto: minor improvements
[minix.git] / lib / libc / rpc / rpc_clnt_create.3
blob195a8c442d60be5323b9f0345568511a0711ac1f
1 .\" @(#)rpc_clnt_create.3n 1.36 93/08/31 SMI; from SVr4
2 .\" Copyright 1989 AT&T
3 .\" @(#)rpc_clnt_create 1.5 89/07/24 SMI;
4 .\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved.
5 .\"     $NetBSD: rpc_clnt_create.3,v 1.11 2009/05/23 18:57:25 christos Exp $
6 .Dd May 23, 2009
7 .Dt RPC_CLNT_CREATE 3
8 .Os
9 .Sh NAME
10 .Nm rpc_clnt_create ,
11 .Nm clnt_control ,
12 .Nm clnt_create ,
13 .Nm clnt_create_vers ,
14 .Nm clnt_destroy ,
15 .Nm clnt_dg_create ,
16 .Nm clnt_pcreateerror ,
17 .Nm clnt_raw_create ,
18 .Nm clnt_spcreateerror ,
19 .Nm clnt_tli_create ,
20 .Nm clnt_tp_create ,
21 .Nm clnt_vc_create ,
22 .Nm rpc_createerr
23 .Nd "library routines for dealing with creation and manipulation of CLIENT handles"
24 .Sh LIBRARY
25 .Lb libc
26 .Sh SYNOPSIS
27 .In rpc/rpc.h
28 .Ft bool_t
29 .Fn clnt_control "CLIENT *clnt" "const u_int req" "char *info"
30 .Ft "CLIENT *"
31 .Fn clnt_create "const char * host" "const rpcprog_t prognum" "const rpcvers_t versnum" "const char *nettype"
32 .Ft "CLIENT *"
33 .Fn clnt_create_vers "const char * host" "const rpcprog_t prognum" "rpcvers_t *vers_outp" "const rpcvers_t vers_low" "const rpcvers_t vers_high" "char *nettype"
34 .Ft void
35 .Fn clnt_destroy "CLIENT * clnt"
36 .Ft "CLIENT *"
37 .Fn clnt_dg_create "const int fildes" "const struct netbuf *svcaddr" "const rpcprog_t prognum" "const rpcvers_t versnum" "const u_int sendsz" "const u_int recvsz"
38 .Ft void
39 .Fn clnt_pcreateerror "const char *s"
40 .Ft "char *"
41 .Fn clnt_spcreateerror "const char *s"
42 .Ft "CLIENT *"
43 .Fn clnt_raw_create "const rpcprog_t prognum" "const rpcvers_t versnum"
44 .Ft "CLIENT *"
45 .Fn clnt_tli_create "const int fildes" "const struct netconfig *netconf" "const struct netbuf *svcaddr" "const rpcprog_t prognum" "const rpcvers_t versnum" "const u_int sendsz" "const u_int recvsz"
46 .Ft "CLIENT *"
47 .Fn clnt_tp_create "const char * host" "const rpcprog_t prognum" "const rpcvers_t versnum" "const struct netconfig *netconf"
48 .Ft "CLIENT *"
49 .Fn clnt_vc_create "const int fildes" "const struct netbuf *svcaddr" "const rpcprog_t prognum" "const rpcvers_t versnum" "const u_int sendsz" "const u_int recvsz"
50 .Sh DESCRIPTION
51 RPC library routines allow C language programs to make procedure
52 calls on other machines across the network.
53 First a
54 .Dv CLIENT
55 handle is created and then the client calls a procedure to send a
56 request to the server.
57 On receipt of the request, the server calls a dispatch routine
58 to perform the requested service, and then sends a reply.
59 .Sh ROUTINES
60 .Bl -tag -width YYYYYYY
61 .It Fn clnt_control
62 A function macro to change or retrieve various information
63 about a client object.
64 .Fa req
65 indicates the type of operation, and
66 .Fa info
67 is a pointer to the information.
68 For both connectionless and connection-oriented transports,
69 the supported values of
70 .Fa req
71 and their argument types and what they do are:
72 .Bl -column "CLSET_FD_NCLOSE" "struct timeval *" "set total timeout"
73 .It Dv CLSET_TIMEOUT Ta "struct timeval *" Ta "set total timeout"
74 .It Dv CLGET_TIMEOUT Ta "struct timeval *" Ta "get total timeout"
75 .El
76 .Pp
77 Note:
78 if you set the timeout using
79 .Fn clnt_control ,
80 the timeout argument passed by
81 .Fn clnt_call
82 is ignored in all subsequent calls.
83 .Pp
84 Note:
85 If you set the timeout value to 0
86 .Fn clnt_control
87 immediately returns an error (
88 .Dv RPC_TIMEDOUT ) .
89 Set the timeout parameter to 0 for batching calls.
90 .Bl -column CLSET_FD_NCLOSE "struct timeval *" "do not close fd on destroy"
91 .It Dv CLGET_SVC_ADDR Ta "struct netbuf *" Ta "get servers address"
92 .It Dv CLGET_FD Ta "int *" Ta "get fd from handle"
93 .It Dv CLSET_FD_CLOSE Ta "void" Ta "close fd on destroy"
94 .It Dv CLSET_FD_NCLOSE Ta void Ta "don't close fd on destroy"
95 .It Dv CLGET_VERS Ta "unsigned long *" Ta "get RPC program version"
96 .It Dv CLSET_VERS Ta "unsigned long *" Ta "set RPC program version"
97 .It Dv CLGET_XID Ta "unsigned long *" Ta "get XID of previous call"
98 .It Dv CLSET_XID Ta "unsigned long *" Ta "set XID of next call"
99 .El
101 The following operations are valid for connectionless transports only:
102 .Bl -column CLSET_RETRY_TIMEOUT "struct timeval *" "set total timeout"
103 .It Dv CLSET_RETRY_TIMEOUT Ta "struct timeval *" Ta "set the retry timeout"
104 .It Dv CLGET_RETRY_TIMEOUT Ta "struct timeval *" Ta "get the retry timeout"
107 The retry timeout is the time that RPC
108 waits for the server to reply before retransmitting the request.
109 .Fn clnt_control
110 returns
111 .Dv TRUE
112 on success and
113 .Dv FALSE
114 on failure.
116 .It Fn clnt_create
117 Generic client creation routine for program
118 .Fa prognum
119 and version
120 .Fa versnum .
121 .Fa host
122 identifies the name of the remote host where the server
123 is located.
124 .Fa nettype
125 indicates the class of transport protocol to use.
126 The transports are tried in left to right order in
127 .Ev NETPATH
128 environment variable or in top to bottom order in
129 the netconfig database.
130 .Fn clnt_create
131 tries all the transports of the
132 .Fa nettype
133 class available from the
134 .Ev NETPATH
135 environment variable and the netconfig database,
136 and chooses the first successful one.
137 A default timeout is set and can be modified using
138 .Fn clnt_control .
139 This routine returns
140 .Dv NULL
141 if it fails.
143 .Fn clnt_pcreateerror
144 routine can be used to print the reason for failure.
146 Note:
147 .Fn clnt_create
148 returns a valid client handle even
149 if the particular version number supplied to
150 .Fn clnt_create
151 is not registered with the
152 .Xr rpcbind 8
153 service.
154 This mismatch will be discovered by a
155 .Fn clnt_call
156 later (see
157 .Xr rpc_clnt_calls 3 ) .
159 .It Fn clnt_create_vers
160 Generic client creation routine which is similar to
161 .Fn clnt_create
162 but which also checks for the
163 version availability.
164 .Fa host
165 identifies the name of the remote host where the server
166 is located.
167 .Fa nettype
168 indicates the class transport protocols to be used.
169 If the routine is successful it returns a client handle created for
170 the highest version between
171 .Fa vers_low
173 .Fa vers_high
174 that is supported by the server.
175 .Fa vers_outp
176 is set to this value.
177 That is, after a successful return
178 .Fa vers_low
179 \*[Le]
180 .Fa *vers_outp
181 \*[Le]
182 .Fa vers_high .
183 If no version between
184 .Fa vers_low
186 .Fa vers_high
187 is supported by the server then the routine fails and returns
188 .Dv NULL .
189 A default timeout is set and can be modified using
190 .Fn clnt_control .
191 This routine returns
192 .Dv NULL
193 if it fails.
195 .Fn clnt_pcreateerror
196 routine can be used to print the reason for failure.
197 Note:
198 .Fn clnt_create
199 returns a valid client handle even
200 if the particular version number supplied to
201 .Fn clnt_create
202 is not registered with the
203 .Xr rpcbind 8
204 service.
205 This mismatch will be discovered by a
206 .Fn clnt_call
207 later (see
208 .Xr rpc_clnt_calls 3 ) .
209 However,
210 .Fn clnt_create_vers
211 does this for you and returns a valid handle
212 only if a version within
213 the range supplied is supported by the server.
215 .It Fn clnt_destroy
216 A function macro that destroys the client's RPC handle.
217 Destruction usually involves deallocation
218 of private data structures, including
219 .Fa clnt
220 itself.
221 Use of
222 .Fa clnt
223 is undefined after calling
224 .Fn clnt_destroy .
225 If the RPC library opened the associated file descriptor, or
226 .Dv CLSET_FD_CLOSE
227 was set using
228 .Fn clnt_control ,
229 the file descriptor will be closed.
230 The caller should call
231 .Fn auth_destroy "clnt-\*[Gt]cl_auth"
232 (before calling
233 .Fn clnt_destroy )
234 to destroy the associated
235 .Dv AUTH
236 structure (see
237 .Xr rpc_clnt_auth 3 ) .
239 .It Fn clnt_dg_create
240 This routine creates an RPC client for the remote program
241 .Fa prognum
242 and version
243 .Fa versnum ;
244 the client uses a connectionless transport.
245 The remote program is located at address
246 .Fa svcaddr .
247 The parameter
248 .Fa fildes
249 is an open and bound file descriptor.
250 This routine will resend the call message in intervals of
251 15 seconds until a response is received or until the
252 call times out.
253 The total time for the call to time out is specified by
254 .Fn clnt_call
255 (see
256 .Fn clnt_call
258 .Xr rpc_clnt_calls 3 ) .
259 The retry time out and the total time out periods can
260 be changed using
261 .Fn clnt_control .
262 The user may set the size of the send and receive
263 buffers with the parameters
264 .Fa sendsz
266 .Fa recvsz ;
267 values of 0 choose suitable defaults.
268 This routine returns
269 .Dv NULL
270 if it fails.
272 .It Fn clnt_pcreateerror
273 Print a message to standard error indicating
274 why a client RPC handle could not be created.
275 The message is prepended with the string
276 .Fa s
277 and a colon, and appended with a newline.
279 .It Fn clnt_spcreateerror
280 Like
281 .Fn clnt_pcreateerror ,
282 except that it returns a string
283 instead of printing to the standard error.
284 A newline is not appended to the message in this case.
285 Warning:
286 returns a pointer to a buffer that is overwritten
287 on each call.
289 .It Fn clnt_raw_create
290 This routine creates an RPC
291 client handle for the remote program
292 .Fa prognum
293 and version
294 .Fa versnum .
295 The transport used to pass messages to the service is
296 a buffer within the process's address space,
297 so the corresponding RPC
298 server should live in the same address space;
299 (see
300 .Fn svc_raw_create
302 .Xr rpc_svc_create 3 ) .
303 This allows simulation of RPC and measurement of
304 RPC overheads, such as round trip times,
305 without any kernel or networking interference.
306 This routine returns
307 .Dv NULL
308 if it fails.
309 .Fn clnt_raw_create
310 should be called after
311 .Fn svc_raw_create .
313 .It Fn clnt_tli_create
314 This routine creates an RPC
315 client handle for the remote program
316 .Fa prognum
317 and version
318 .Fa versnum .
319 The remote program is located at address
320 .Fa svcaddr .
322 .Fa svcaddr
324 .Dv NULL
325 and it is connection-oriented, it is assumed that the file descriptor
326 is connected.
327 For connectionless transports, if
328 .Fa svcaddr
330 .Dv NULL ,
331 .Dv RPC_UNKNOWNADDR
332 error is set.
333 .Fa fildes
334 is a file descriptor which may be open, bound and connected.
335 If it is
336 .Dv RPC_ANYFD ,
337 it opens a file descriptor on the transport specified by
338 .Fa netconf .
340 .Fa fildes
342 .Dv RPC_ANYFD
344 .Fa netconf
346 .Dv NULL ,
348 .Dv RPC_UNKNOWNPROTO
349 error is set.
351 .Fa fildes
352 is unbound, then it will attempt to bind the descriptor.
353 The user may specify the size of the buffers with the parameters
354 .Fa sendsz
356 .Fa recvsz ;
357 values of 0 choose suitable defaults.
358 Depending upon the type of the transport (connection-oriented
359 or connectionless),
360 .Fn clnt_tli_create
361 calls appropriate client creation routines.
362 This routine returns
363 .Dv NULL
364 if it fails.
366 .Fn clnt_pcreateerror
367 routine can be used to print the reason for failure.
368 The remote rpcbind
369 service (see
370 .Xr rpcbind 8 )
371 is not consulted for the address of the remote
372 service.
374 .It Fn clnt_tp_create
375 Like
376 .Fn clnt_create
377 except
378 .Fn clnt_tp_create
379 tries only one transport specified through
380 .Fa netconf .
381 .Fn clnt_tp_create
382 creates a client handle for the program
383 .Fa prognum ,
384 the version
385 .Fa versnum ,
386 and for the transport specified by
387 .Fa netconf .
388 Default options are set,
389 which can be changed using
390 .Fn clnt_control
391 calls.
392 The remote rpcbind service on the host
393 .Fa host
394 is consulted for the address of the remote service.
395 This routine returns
396 .Dv NULL
397 if it fails.
399 .Fn clnt_pcreateerror
400 routine can be used to print the reason for failure.
402 .It Fn clnt_vc_create
403 This routine creates an RPC
404 client for the remote program
405 .Fa prognum
406 and version
407 .Fa versnum ;
408 the client uses a connection-oriented transport.
409 The remote program is located at address
410 .Fa svcaddr .
411 The parameter
412 .Fa fildes
413 is an open and bound file descriptor.
414 The user may specify the size of the send and receive buffers
415 with the parameters
416 .Fa sendsz
418 .Fa recvsz ;
419 values of 0 choose suitable defaults.
420 This routine returns
421 .Dv NULL
422 if it fails.
423 The address
424 .Fa svcaddr
425 should not be
426 .Dv NULL
427 and should point to the actual address of the remote program.
428 .Fn clnt_vc_create
429 does not consult the remote rpcbind service for this information.
431 .It struct rpc_createerr rpc_createerr;
432 A global variable whose value is set by any RPC
433 client handle creation routine
434 that fails.
435 It is used by the routine
436 .Fn clnt_pcreateerror
437 to print the reason for the failure.
439 .Sh SEE ALSO
440 .Xr rpc 3 ,
441 .Xr rpc_clnt_auth 3 ,
442 .Xr rpc_clnt_calls 3 ,
443 .Xr rpcbind 8