OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man3 / rpc.3
1 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
2 .\"
3 .\" @(#)rpc.3n  2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI
4 .\"
5 .\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
6 .\"
7 .\" Japanese Version Copyright (c) 1999 HANATAKA Shinya
8 .\"         all rights reserved.
9 .\" Translated Tue Jan  4 20:48:23 JST 2000
10 .\"         by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
11 .\" Updated & Modified Sun Oct 21 01:07:09 JST 2001
12 .\"         by Yuichi SATO <ysato@h4.dion.ne.jp>
13 .\"
14 .TH RPC 3 2008-07-17 "" "Linux Programmer's Manual"
15 .SH 名前
16 rpc \- 遠隔手続き呼び出し(RPC)のためのライブラリ・ルーティン
17 .SH 書式と説明
18 これらのルーティンは C プログラムでネットワークを通して
19 他のマシンにアクセスするプロシジャを作成することを可能にする。
20 最初にクライアントはデータパケットをサーバに送るために
21 プロシジャを呼び出す。
22 サーバはパケットを受け取ると、配分ルーチンを呼び出して
23 要求されたサービスに実行し、返答を送り返す。
24 最後にプロシジャ・コールはクライアントへと戻る。
25 .\" .LP
26 .\" 今現在は rpc_secure.3 は入っていない -- MTK, 19 Sep 05
27 .\" (DES 認証による) Secure RPC で使用されるルーティンについての説明は
28 .\" .BR rpc_secure (3)
29 .\" に存在する。 Secure RPC は DES 認証が利用可能な場合にのみ使用できる。
30 .LP
31 これらのルーティンを使用するには、ヘッダファイル
32 .I "<rpc/rpc.h>"
33 をインクルードすること。
34
35 下記のプロトタイプでは次の型を使用している。
36 .in +4n
37 .nf
38
39 typedef int \fIbool_t\fP;
40
41 typedef bool_t (*\fIxdrproc_t\fP) (XDR *, void *,...);
42
43 typedef bool_t (*\fIresultproc_t\fP) (caddr_t resp,
44                                 struct sockaddr_in *raddr);
45 .fi
46 .in
47 .LP
48
49 .IR AUTH ,
50 .IR CLIENT ,
51 .IR SVCXPRT ,
52 .IR XDR
53 の宣言についてはヘッダファイルを参照。
54 .LP
55 .nf
56 .BI "void auth_destroy(AUTH *" auth );
57 .fi
58 .IP
59 このマクロは
60 .I auth
61 に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の
62 破棄を含んでいる。
63 .BR auth_destroy ()
64 を呼び出した後に
65 .I auth
66 を使用することは未定義である。
67 .LP
68 .nf
69 .BI "AUTH *authnone_create(void);"
70 .fi
71 .IP
72 各リモート・プロシジャ・コールで使用できない仮の認証情報として渡される
73 RPC 認証ハンドルを作成して返す。
74 これは RPC で使用されるデフォルトの認証である。
75 .LP
76 .nf
77 .BI "AUTH *authunix_create(char *" host ", int " uid ", int " gid ,
78 .BI "                      int " len ", int *" aup_gids );
79 .fi
80 .IP
81 認証情報を含んだ RPC 認証ハンドルを作成して返す。
82 .I host
83 パラメーターは情報が作成されたマシンの名前である。
84 .I uid
85 はそのユーザのユーザ
86 .SM ID
87
88 .I gid
89 はそのユーザの現在のグループ
90 .SM ID
91 である。
92 .I len
93
94 .I aup_gids
95 はそのユーザが所属するグループの配列を参照している。
96 他のユーザになりすますことは簡単である。
97 .LP
98 .nf
99 .BI "AUTH *authunix_create_default(void);"
100 .fi
101 .IP
102 適切なパラメーターで
103 .BR authunix_create ()
104 を呼び出す。
105 .LP
106 .nf
107 .BI "int callrpc(char *" host ", unsigned long " prognum ,
108 .BI "            unsigned long " versnum ", unsigned long " procnum ,
109 .BI "            xdrproc_t " inproc ", char *" in ,
110 .BI "            xdrproc_t " outproc ", char *" out );
111 .fi
112 .IP
113 マシン
114 .I host
115 上で
116 .IR prognum ,
117 .IR versnum ,
118 .I procnum
119 に関連付けられたリモート・プロシジャを呼び出す。
120 パラメーター
121 .I in
122 はプロシジャの引き数のアドレスであり
123 .I out
124 は結果を格納するアドレスである。
125 .I inproc
126 はプロシジャのパラメーターをエンコードするのに使用され、
127 .I outproc
128 は結果をデコードするのに使用される。
129 このルーティンは成功した場合にはゼロを返す。失敗した場合には
130 .B "enum clnt_stat"
131 を整数にキャストした値を返す。
132 .BR clnt_perrno ()
133 ルーティンが失敗の状態をメッセージに変換するのに使用できる。
134 .IP
135 警告: このルーティンでリモート・プロシジャを呼び出すと通信には
136 UDP/IP が使用される。この際の制限については
137 .BR clntudp_create ()
138 を参照すること。このルーティンを使用して認証や時間切れの制御を
139 することはできない。
140 .LP
141 .nf
142 .BI "enum clnt_stat clnt_broadcast(unsigned long " prognum ,
143 .BI "                     unsigned long " versnum ", unsigned long " procnum ,
144 .BI "                     xdrproc_t " inproc ", char *" in ,
145 .BI "                     xdrproc_t " outproc ", char *" out ,
146 .BI "                     resultproc_t " eachresult );
147 .fi
148 .IP
149 .BR callrpc ()
150 と同様であるが、メッセージがローカルのブロードキャスト・ネットワーク
151 全体へとブロードキャストされる点が異っている。回答を受け取る度に
152 このルーティンは以下の形式の
153 .BR eachresult ()
154 を呼び出す。
155 .IP
156 .in +4n
157 .nf
158 .BI "eachresult(char *" out ", struct sockaddr_in *" addr );
159 .fi
160 .in
161 .IP
162 ここで
163 .I out
164
165 .BR clnt_broadcast ()
166 に渡される
167 .I out
168 と同じであるが、リモート・プロシジャからの出力がデコードされている
169 点のみが異っている。
170 .I addr
171 は結果を送って来たマシンのアドレスを指している。
172 .BR eachresult ()
173 がゼロを返した場合、
174 .BR clnt_broadcast ()
175 はさらなる回答を待つ。そうでなければ適切な状態で終了する。
176 .IP
177 警告: ブロードキャスト・ソケットはデータリンク層の最大転送単位に
178 制限されている。イーサネットの場合、最大値は 1500 バイトである。
179 .LP
180 .nf
181 .BI "enum clnt_stat clnt_call(CLIENT *" clnt ", unsigned long " procnum ,
182 .BI "                    xdrproc_t " inproc ", char *" in ,
183 .BI "                    xdrproc_t " outproc ", char *" out ,
184 .BI "                    struct timeval " tout );
185 .fi
186 .IP
187 このマクロはクライアント・ハンドル
188 .I clnt
189 に関連付けられた
190 .I procnum
191 リモート・プロシジャを呼び出す。
192 クライアント・ハンドルは
193 .BR clnt_create ()
194 のような
195 .SM RPC
196 クライアント作成ルーティンによって得られる。
197 パタメータ
198 .I in
199 はプロシジャの引き数のアドレスである。
200 .I out
201 はプロシジャの返り値を格納するアドレスである。
202 .I inproc
203 はプロシジャのパラメーターをエンコードするのに使用される。
204 .I outproc
205 はプロシジャの返り値をデコードするのに使用される。
206 .I tout
207 は結果が返されるのを待つ時間である。
208 .LP
209 .nf
210 .BI "clnt_destroy(CLIENT *" clnt );
211 .fi
212 .IP
213 このマクロはクライアントの RPC ハンドルを破壊する。破壊には通常は
214 .I clnt
215 自身も含めて私的なデータ構造体の破棄が含まれている。
216 .BR clnt_destroy ()
217 の呼び出しの後に
218 .I clnt
219 を使用することは未定義である。
220 RPC ライブラリが関連するソケットをオープンした場合には、
221 それも閉じられる。それ以外の場合にはソケットはオープンされたままである。
222 .LP
223 .nf
224 .BI "CLIENT *clnt_create(char *" host ", unsigned long " prog ,
225 .BI "                    unsigned long " vers ", char *" proto );
226 .fi
227 .IP
228 一般的なクライアントの作成ルーティンである。
229 .I host
230 はサーバのあるリモートホストの名前を指定する。
231 .I proto
232 どのような通信プロトコルを使用するかを指定する。現在ここに
233 使用できる値は \(lqudp\(rq と \(lqtcp\(rq である。
234 デフォルトの時間切れが設定されるが、
235 .BR clnt_control ()
236 を使用して変更可能である。
237 .IP
238 警告:
239 UDP を使用した場合には欠点がある。
240 UDP に基づいた RPC メッセージは
241 最大でも 8 KByte のエンコードデータしか保持する
242 ことができないため、大きな引き数や巨大な結果を取るプロシジャに
243 は使用することができない。
244 .LP
245 .nf
246 .BI "bool_t clnt_control(CLIENT *" cl ", int " req ", char *" info );
247 .fi
248 .IP
249 このマクロは各種クライアントについて情報を変更したり、取得したり
250 するのに使用する。
251 .I req
252 は操作の種類を指定する。
253 .I info
254 は情報へのポインターである。
255 UDP と TCP どちらの場合も使用可能な
256 .I req
257 の値と、その引き数の型、およびその内容は以下の通りである:
258 .IP
259 .in +4n
260 .nf
261 .ta +2.0i +2.0i +2.0i
262 \fBCLSET_TIMEOUT\fP  \fIstruct timeval\fP // 時間切れを設定する
263 \fBCLGET_TIMEOUT\fP  \fIstruct timeval\fP // 時間切れを取得する
264 .fi
265 .in
266 .IP
267 注意:
268 .BR clnt_control ()
269 を使用して時間切れを設定した場合にはそれ以後は
270 .BR clnt_call ()
271 に渡される時間切れパラメーターは全て無視される。
272 .IP
273 .in +4n
274 .nf
275 \fBCLGET_SERVER_ADDR\fP  \fIstruct sockaddr_in \fP // サーバアドレスを取得する
276 .fi
277 .in
278 .IP
279 以下の操作は UDP の場合にのみ有効である:
280 .IP
281 .in +4n
282 .nf
283 \fBCLSET_RETRY_TIMEOUT\fP  \fIstruct timeval\fP // 再送間隔を設定する
284 \fBCLGET_RETRY_TIMEOUT\fP  \fIstruct timeval\fP // 再送間隔を取得する
285 .fi
286 .in
287 .IP
288 再送間隔は次に要求を再送する前に
289 "UDP RPC" がサーバの回答を待つ時間である。
290 .LP
291 .nf
292 .BI "clnt_freeres(CLIENT * " clnt ", xdrproc_t " outproc ", char *" out );
293 .fi
294 .IP
295 このマクロは RPC 呼び出しの結果のデコードの際に
296 RPC/XDR システムによって割当てられたデータを解放する。
297 パラメーター
298 .I out
299 は結果のアドレスである。
300 .I outproc
301 は結果を記述している XDR ルーティンである。
302 このルーティンは結果の解放に成功した場合には 1 を返す。
303 失敗した場合にはゼロを返す。
304 .LP
305 .nf
306 .BI "void clnt_geterr(CLIENT *" clnt ", struct rpc_err *" errp );
307 .fi
308 .IP
309 このマクロはクライアント・ハンドルのエラー構造体を
310 .I errp
311 アドレスで指定された構造体へコピーする。
312 .LP
313 .nf
314 .BI "void clnt_pcreateerror(char *" s );
315 .fi
316 .IP
317 標準エラー出力に、なぜクライアント RPC ハンドルの作成が
318 できなかったかについてのメッセージを表示する。
319 メッセージの前に文字列
320 .I s
321 とコロン(:)が表示される。
322 .BR clnt_create (),
323 .BR clntraw_create (),
324 .BR clnttcp_create (),
325 .BR clntudp_create ()
326 の呼び出しが失敗した時に使用すること。
327 .LP
328 .nf
329 .BI "void clnt_perrno(enum clnt_stat " stat );
330 .fi
331 .IP
332 標準エラー出力に
333 .I stat
334 によって指示されるエラー状態に対応するメッセージを表示する。
335 .BR callrpc ()
336 の後に使用すること。
337 .LP
338 .nf
339 .BI "clnt_perror(CLIENT *" clnt ", char *" s );
340 .fi
341 .IP
342 標準エラー出力に、なぜ RPC 呼び出しが失敗したかについてのメッセージを表示する。
343 .I clnt
344 はコールに使用したハンドルである。
345 メッセージの前に文字列
346 .I s
347 とコロン(:)が表示される。
348 .BR clnt_call ()
349 が失敗した後に使用すること。
350 .LP
351 .nf
352 .BI "char *clnt_spcreateerror(char *" s );
353 .fi
354 .IP
355 .BR clnt_pcreateerror ()
356 と同様であるが、標準エラー出力へ表示するかわりに文字列を返す点が異っている。
357 .IP
358 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
359 .LP
360 .nf
361 .BI "char *clnt_sperrno(enum clnt_stat " stat );
362 .fi
363 .IP
364 .BR clnt_perrno ()
365 と同じ引き数を取るが、なぜ
366 RPC 呼び出しが失敗したかについてのメッセージを標準エラー出力に表示する
367 かわりに、メッセージを格納している文字列へのポインターを返す。
368 文字列は NEWLINE(改行) で終っている。
369 .IP
370 .BR clnt_sperrno ()
371 はプログラムが標準エラー出力を持っていない場合(プログラムがサーバとし
372 て走っている場合にはよくありえる)や、プログラマーがメッセージを
373 .BR printf (3)
374 で出力することを望まない場合や、メッセージの形式が
375 .BR clnt_perrno ()
376 がサポートするものとは異っている場合などに
377 .BR clnt_perrno ()
378 のかわりに使用される。
379 注意:
380 .BR clnt_sperror ()
381
382 .BR clnt_spcreaterror ()
383 とは違って
384 .BR clnt_sperrno ()
385 は静的データへのポインターを返す。しかし呼び出しごとに上書きされることはない。
386 .LP
387 .nf
388 .BI "char *clnt_sperror(CLIENT *" rpch ", char *" s );
389 .fi
390 .IP
391 .BR clnt_perror ()
392 と同様であるが、標準エラー出力に表示する代りに
393 .RB ( clnt_sperrno ()
394 のように) 文字列へのポインターを返す点が異っている。
395 .IP
396 バグ: 呼び出しごとに上書きされる静的データへのポインターを返す。
397 .LP
398 .nf
399 .BI "CLIENT *clntraw_create(unsigned long " prognum \
400 ", unsigned long " versnum );
401 .fi
402 .IP
403 このルーティンはリモート・プログラム
404 .IR prognum 、
405 バージョン
406 .I versnum
407 のための擬似 RPC クライアントを作成する。メッセージをサービスに渡すために使用する
408 通信は実際にはそのプロセスのアドレス空間にあるバッファーである。
409 それで、対応する RPC サーバが同じアドレス空間の中にいなければならない。
410 .BR svcraw_create ()
411 を参照すること。
412 これにより RPC のシミュレーションや、カーネル・インターフェースに影響されずに
413 応答時間などの RPC オーバヘッドの獲得ができる。
414 失敗した場合にはこのルーティンは NULL を返す。
415 .LP
416 .nf
417 .BI "CLIENT *clnttcp_create(struct sockaddr_in *" addr ,
418 .BI "                unsigned long " prognum ", unsigned long " versnum ,
419 .BI "                int *" sockp ", unsigned int " sendsz \
420 ", unsigned int " recvsz );
421 .fi
422 .IP
423 このルーティンはリモート・プログラム
424 .IR prognum 、
425 バージョン
426 .I versnum
427 のための RPC クライアントを作成する。クライアントは通信に
428 TCP/IP を使用する。リモート・プログラムはインターネット・アドレスの
429 .I *addr
430 にある。
431 .\"The following inline font conversion is necessary for the hyphen indicator
432 \fIaddr\->sin_port\fR がゼロならば、実際にリモート・プログラムが
433 listen しているポートが設定される。(この情報のためにリモートの
434 .B portmap
435 サービスが利用される。) パラメーター
436 .I sockp
437 はソケットである。もしこれが
438 .B RPC_ANYSOCK
439 に設定されている場合は、このルーティンが新しいソケットをオープンして
440 .I sockp
441 に設定する。
442 TCP に基づいた RPC はバッファされた I/O
443 を使用するため、ユーザはパラメーター
444 .I sendsz
445
446 .I recvsz
447 を使用して送信バッファと受信バッファのサイズを指定することができる。
448 ゼロを指定した場合には適切なデフォルトが選択される。
449 このルーティンは失敗した場合は NULL を返す。
450 .LP
451 .nf
452 .BI "CLIENT *clntudp_create(struct sockaddr_in *" addr ,
453 .BI "                unsigned long " prognum ", unsigned long " versnum ,
454 .BI "                struct timeval " wait ", int *" sockp );
455 .fi
456 .IP
457 このルーティンはリモート・プログラム
458 .IR prognum 、
459 バージョン
460 .I versnum
461 のための RPC クライアントを作成する。クライアントは通信に
462 UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの
463 .I *addr
464 にある。
465 \fIaddr\->sin_port\fR がゼロならば、実際にリモート・プログラムが
466 listen しているポートが設定される。(この情報のためにリモートの
467 .B portmap
468 サービスが利用される。) パラメーター
469 .I sockp
470 はソケットである。もしこれが
471 .B RPC_ANYSOCK
472 に設定されている場合は、このルーティンが新しいソケットをオープンして
473 .I sockp
474 に設定する。
475 UDP 通信は回答があるか、時間切れが起こるまで
476 .B wait
477 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
478 .BR clnt_call ()
479 で指定する。
480 .IP
481 警告: UDP に基づいた
482 RPC メッセージは最大でも 8 Kbyte までのエンコードされたデータしか
483 保持できないため、この通信は大きな引き数や巨大な結果を取る
484 プロシジャには使用できない。
485 .LP
486 .nf
487 .BI "CLIENT *clntudp_bufcreate(struct sockaddr_in *" addr ,
488 .BI "            unsigned long " prognum ", unsigned long " versnum ,
489 .BI "            struct timeval " wait ", int *" sockp ,
490 .BI "            unsigned int " sendsize ", unsigned int "recosize );
491 .fi
492 .IP
493 このルーティンはリモート・プログラム
494 .IR prognum 、
495 バージョン
496 .I versnum
497 のための RPC クライアントを作成する。クライアントは通信に
498 UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの
499 .I *addr
500 にある。
501 \fIaddr\->sin_port\fR がゼロならば、実際にリモート・プログラムが
502 listen しているポートが設定される。(この情報のためにリモートの
503 .B portmap
504 サービスが利用される。) パラメーター
505 .I sockp
506 はソケットである。もしこれが
507 .B RPC_ANYSOCK
508 に設定されている場合は、このルーティンが新しいソケットをオープンして
509 .I sockp
510 に設定する。
511 UDP 通信は回答があるか、時間切れが起こるまで
512 .B wait
513 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
514 .BR clnt_call ()
515 で指定する。
516 .IP
517 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや
518 受信パケットの最大サイズを指定することが可能になる。
519 .LP
520 .nf
521 .BI "void get_myaddress(struct sockaddr_in *" addr );
522 .fi
523 .IP
524 このマシンの IP アドレスを
525 .I *addr
526 に格納する。
527 .I /etc/hosts
528 を扱うライブラリ・ルーティンは使用しない。ポート番号は常に
529 .B htons(PMAPPORT)
530 に設定される。
531 .LP
532 .nf
533 .BI "struct pmaplist *pmap_getmaps(struct sockaddr_in *" addr );
534 .fi
535 .IP
536 .B portmap
537 サービスのためのユーザインターフェースであり、
538 IP アドレス
539 .I *addr
540 にあるホストの現在の RPC プログラムからポート番号へのマッピングの一覧を返す。
541 このルーティンが NULL を返す場合もある。
542 .RB ` "rpcinfo \-p" '
543 コマンドはこのルーティンを使用している。
544 .LP
545 .nf
546 .BI "unsigned short pmap_getport(struct sockaddr_in *" addr ,
547 .BI "                    unsigned long " prognum ", unsigned long " versnum ,
548 .BI "                    unsigned int " protocol );
549 .fi
550 .IP
551 .B portmap
552 サービスのためのユーザ・インターフェースで、
553 プログラム番号
554 .IR prognum 、
555 バージョン
556 .IR versnum 、
557 関連付けられた通信プロトコル
558 .I protocol
559 をサポートするサービスが待っているポート番号を返す。
560 .I protocol
561 の値はほとんどの場合 IPPROTO_UDP か IPPROTO_TCP である。
562 返り値ゼロはマッピングが存在しないか、
563 RPC システムがリモートの
564 .B portmap
565 サービスの参照に失敗したことを意味する。後者の場合は大域変数
566 .I rpc_createerr
567 が RPC 状態を保持している。
568 .LP
569 .nf
570 .BI "enum clnt_stat pmap_rmtcall(struct sockaddr_in *" addr ,
571 .BI "                    unsigned long " prognum ", unsigned long " versnum ,
572 .BI "                    unsigned long " procnum ,
573 .BI "                    xdrproc_t " inproc ", char *" in ,
574 .BI "                    xdrproc_t " outproc ", char *" out ,
575 .BI "                    struct timeval " tout ", unsigned long *" portp );
576 .fi
577 .IP
578 .B portmap
579 サービスのためのユーザ・インターフェースで、
580 IP アドレス
581 .I *addr
582 のホストの
583 .B portmap
584 を参照して、
585 RPC 呼び出しを生成し、そのホスト上のプロシジャを呼び出す。
586 パラメーター
587 .I *portp
588 はプロシジャが成功した場合にはプログラムのポート番号に修正される。
589 他のパラメーターの定義については
590 .BR callrpc ()
591
592 .BR clnt_call ()
593 で説明してある。
594 このプロシジャは \(lqping\(rq のみに使用すべきである。
595 .BR clnt_broadcast ()
596 も参照すること。
597 .LP
598 .nf
599 .BI "bool_t pmap_set(unsigned long " prognum ", unsigned long " versnum ,
600 .BI "                unsigned int " protocol ", unsigned short " port );
601 .fi
602 .IP
603 .B portmap
604 サービスのためのユーザ・インターフェースで、
605 .RI [ prognum , versnum , protocol\fR]
606 の組み合わせと
607 .I port
608 との間のマッピングを、そのマシン上の
609 .B portmap
610 サービスに登録する。
611 .I protocol
612 はほとんどの場合
613 .B IPPROTO_UDP
614
615 .B IPPROTO_TCP
616 のどちらかである。
617 このルーティンは成功した場合には 1 を返す。失敗した場合にはゼロを返す。
618 .BR svc_register ()
619 によって自動的に実行される。
620 .LP
621 .nf
622 .BI "bool_t pmap_unset(unsigned long " prognum ", unsigned long " versnum );
623 .fi
624 .IP
625 .B portmap
626 サービスのためのユーザ・インターフェースで、
627 .RI [ prognum , versnum , *\fR]
628 の組み合わせと
629 .B ports
630 の間のマッピングをそのマシン上の
631 .B portmap
632 サービスから削除する。このルーティンは成功した場合は 1 を返す。
633 失敗した場合には 0 を返す。
634 .LP
635 .nf
636 .BI "int registerrpc(unsigned long " prognum ", unsigned long " versnum ,
637 .BI "                unsigned long " procnum ", char *(*" procname ")(char *),"
638 .BI "                xdrproc_t " inproc ", xdrproc_t " outproc );
639 .fi
640 .IP
641 RPC サービスパッケージを使用して
642 .I procname
643 プロシジャを登録する。プログラム
644 .IR prognum 、
645 バージョン
646 .IR versnum 、
647 プロシジャ
648 .I procnum
649 への要求が届いた場合、
650 .I procname
651 がパラメーターへのポインターを持って呼び出される。
652 .I progname
653 は静的な結果へのポインターを返す必要がある。
654 .I inproc
655 はパラメーターをデコードするために使用される。
656 .I outproc
657 は結果をエンコードするために使用される。
658 このルーティンは登録に成功した場合にはゼロを返す。
659 失敗した場合には \-1 を返す。
660 .IP
661 警告: この形式で登録されたリモート・プロシジャは
662 UDP/IP 通信を使用する。制限に関しては
663 .BR svcudp_create ()
664 を参照すること。
665 .LP
666 .nf
667 .BI "struct rpc_createerr " rpc_createerr ;
668 .fi
669 .IP
670 成功しなかった RPC クライアント生成ルーティンによって設定される大域変数。
671 .BR clnt_pcreateerror ()
672 ルーティンが理由を表示するために使用する。
673 .LP
674 .nf
675 .BI "void svc_destroy(SVCXPRT *" xprt );
676 .fi
677 .IP
678 このマクロは通信ハンドル
679 .I xprt
680 の RPC サービスを破壊する。破壊には通常、
681 .I xprt
682 を含めて、私的なデータ構造体の破棄が含まれている。
683 このルーティンを呼び出した後に
684 .I xprt
685 を使用することは未定義である。
686 .LP
687 .nf
688 .BI "fd_set " svc_fdset ;
689 .fi
690 .IP
691 RPC サービス側のファイル・ディスクリプターのビットマスクを反映した大域変数。
692 .BR select (2)
693 システムコールのパラメーターのために利用できる。これは
694 サービスの実装者が
695 .BR svc_run ()
696 を呼び出さなずに、独自の非同期イベント処理を用いる場合にのみ意味がある。
697 この変数は読み込み専用で (そのまま
698 .BR select (2)
699 へ渡してはならない!)、
700 .BR svc_getreqset ()
701 呼び出しや生成ルーティンの後に変更されているかもしれない。
702 .LP
703 .nf
704 .BI "int " svc_fds ;
705 .fi
706 .IP
707 .B svc_fdset
708 に似ているが、32 ディスクリプターに制限されている。
709 このインターフェースは
710 .B svc_fdset
711 によって置き換えられた。
712 .LP
713 .nf
714 .BI "svc_freeargs(SVCXPRT *" xprt ", xdrproc_t " inproc ", char *" in );
715 .fi
716 .IP
717 このマクロはサービス・プロシジャが
718 .BR svc_getargs ()
719 を使用して引き数をデコードした時に
720 RPC/XDR システムによって割り当てられたデータを解放する。
721 このルーティンは解放に成功した場合には 1 を返す。
722 失敗した場合にはゼロを返す。
723 .LP
724 .nf
725 .BI "svc_getargs(SVCXPRT *" xprt ", xdrproc_t " inproc ", char *" in );
726 .fi
727 .IP
728 このマクロは RPC サービス通信ハンドル
729 .I xprt
730 に関連付けられた RPC 要求の引き数をデコードする。パラメーター
731 .I in
732 は引き数の格納されたアドレスである。
733 .I inproc
734 は引き数をデコードするための XDR ルーティンである。
735 このルーティンはデコードに成功した場合は 1 を返す。
736 失敗した場合はゼロを返す。
737 .LP
738 .nf
739 .BI "struct sockaddr_in *svc_getcaller(SVCXPRT *" xprt );
740 .fi
741 .IP
742 RPC サービス通信ハンドル
743 .I xprt
744 に関連付けられたプロシジャの呼び出し元のネットワーク・アドレスを
745 取得するための標準的な手段。
746 .LP
747 .nf
748 .BI "void svc_getreqset(fd_set *" rdfds );
749 .fi
750 .IP
751 このルーティンはサービスの実装者が
752 .BR svc_run ()
753 を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。
754 これは
755 .BR select (2)
756 システムコールが RPC ソケットに
757 RPC 要求が到着したと返した場合にのみ呼び出される。
758 .I rdfds
759 は結果の読み込みファイル・ディスクリプターのビットマスクである。
760 このルーティンは
761 .I rdfds
762 の値に関連付けられた全てのソケットのサービスが行なわれた時に
763 返ってくる。
764 .LP
765 .nf
766 .BI "void svc_getreq(int " rdfds );
767 .fi
768 .IP
769 .BR svc_getreqset ()
770 に似ているがディスクリプターの数が 32 に制限されている。
771 このインターフェースは
772 .BR svc_getreqset ()
773 によって置き換えられた。
774 .LP
775 .nf
776 .BI "bool_t svc_register(SVCXPRT *" xprt ", unsigned long " prognum ,
777 .BI "                    unsigned long " versnum ,
778 .BI "                    void (*" dispatch ")(svc_req *, SVCXPRT *),"
779 .BI "                    unsigned long " protocol );
780 .fi
781 .IP
782 .I prognum
783
784 .I versnum
785 をサービス配分プロシジャ
786 .I dispatch
787 で関連付ける。
788 .I protocol
789 がゼロの場合、サービスは
790 .B portmap
791 サービスには登録されない。
792 .I protocol
793 がゼロ以外の場合、
794 .RI [ prognum , versnum , protocol\fR]
795 の組み合わせと \fIxprt\->xp_port\fR とのマッピングがローカルの
796 .B portmap
797 サービスに登録される。(一般的に
798 .I protocol
799 はゼロ、
800 .BR IPPROTO_UDP 、
801 .B IPPROTO_TCP
802 のどれかである。)
803 プロシジャ
804 .I dispatch
805 は以下の形式である:
806 .in +4n
807 .nf
808
809 dispatch(struct svc_req *request, SVCXPRT *xprt);
810 .fi
811 .in
812 .IP
813 .BR svc_register ()
814 ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
815 .LP
816 .nf
817 .B "void svc_run(void);"
818 .fi
819 .IP
820 このルーティンは戻ってこない。これは
821 .SM RPC
822 要求の到着を待ち、どれかが届いた場合に
823 .BR svc_getreq ()
824 を使用して適切なサービス・プロシジャを呼び出す。
825 このプロシジャは通常は
826 .BR select (2)
827 システムコールから返るのを待っている。
828 .LP
829 .nf
830 .BI "bool_t svc_sendreply(SVCXPRT *" xprt ", xdrproc_t " outproc \
831 ", char *" out );
832 .fi
833 .IP
834 RPC サービス配分ルーティンによってリモート・プロシジャ・コールの結果を
835 返すために呼び出される。
836 パラメーター
837 .I xprt
838 はその要求に関連付けられた通信ハンドルである。
839 .I outproc
840 は結果をエンコードするために使用する XDR ルーティンである。
841 .I out
842 は結果のアドレスである。このルーティンは成功した場合は 1 を返す。
843 失敗した場合はゼロを返す。
844 .LP
845 .nf
846 .BI "void svc_unregister(unsigned long " prognum ", unsigned long " versnum );
847 .fi
848 .IP
849 配分ルーティンから
850 .RI [ prognum , versnum ]
851 および
852 .RI [ prognum , versnum , *\fR]
853 の組み合わせからポート番号へのマッピングを全て削除する。
854 .LP
855 .nf
856 .BI "void svcerr_auth(SVCXPRT *" xprt ", enum auth_stat " why );
857 .fi
858 .IP
859 認証エラーによりリモート・プロシジャ・コールの実行を拒否された
860 場合にサービス配分ルーティンによって呼び出される。
861 .LP
862 .nf
863 .BI "void svcerr_decode(SVCXPRT *" xprt );
864 .fi
865 .IP
866 パラメータのデコードに失敗した場合に
867 サービス配分ルーティンによって呼び出される。
868 .BR svc_getargs ()
869 も参照すること。
870 .LP
871 .nf
872 .BI "void svcerr_noproc(SVCXPRT *" xprt );
873 .fi
874 .IP
875 要求のあったプロシジャ番号が実装されていない場合に
876 サービス配分ルーティンより呼び出される。
877 .LP
878 .nf
879 .BI "void svcerr_noprog(SVCXPRT *" xprt );
880 .fi
881 .IP
882 RPC パッケージに要求されたプログラムが登録されていない場合に呼び出される。
883 サービスの実装には通常、このルーティンは必要ない。
884 .LP
885 .nf
886 .BI "void svcerr_progvers(SVCXPRT *" xprt );
887 .fi
888 .IP
889 RPC パッケージに要求されたバージョンのプログラムが登録されていない場合に
890 呼び出される。サービスの実装には通常、このルーティンは必要ない。
891 .LP
892 .nf
893 .BI "void svcerr_systemerr(SVCXPRT *" xprt );
894 .fi
895 .IP
896 特定のプロトコルによってカバーされていなシステム・エラーが
897 検出された場合にサービス配分ルーティンによって呼び出される。
898 例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には
899 このルーティンが呼び出されるかもしれない。
900 .LP
901 .nf
902 .BI "void svcerr_weakauth(SVCXPRT *" xprt );
903 .fi
904 .IP
905 認証パラメータが足りないためにリモート・プロシジャ・コールの実行を
906 拒否された場合にサービス配分ルーティンによって呼び出される。
907 このルーティンは
908 .B "svcerr_auth(xprt, AUTH_TOOWEAK)"
909 を呼び出す。
910 .LP
911 .nf
912 .BI "SVCXPRT *svcfd_create(int " fd ", unsigned int " sendsize ,
913 .BI "                      unsigned int " recvsize );
914 .fi
915 .IP
916 任意のオープンされたディスクリプター上にサービスを作成する。
917 典型的に、ディスクリプターは
918 TCP のようなストリーム・プロトコルで接続されたソケットである。
919 .I sendsize
920
921 .I recvsize
922 には送信バッファと受信バッファの大きさを指定する。もしゼロが指定された
923 場合は適切なデフォルトが選択される。
924 .LP
925 .nf
926 .BI "SVCXPRT *svcraw_create(void);"
927 .fi
928 .IP
929 このルーティンは擬似 RPC サービス通信を生成して、そのポインターを返す。
930 通信は実際にはそのプロセスのアドレス空間にあるバッファなので
931 対応する RPC クライアントは同じアドレス空間にいる必要がある。
932 .BR clntraw_create ()
933 を参照すること。
934 このルーティンで
935 RPC のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの
936 RPC オーバヘッドを取得ができる。このルーティンは失敗した場合は NULL を返す。
937 .LP
938 .nf
939 .BI "SVCXPRT *svctcp_create(int " sock ", unsigned int " send_buf_size ,
940 .BI "                       unsigned int " recv_buf_size );
941 .fi
942 .IP
943 このルーティンは TCP/IP に基づく
944 RPC サービス通信を作成し、それへのポインターを返す。
945 通信はソケット
946 .I sock
947 に結びつけられる。
948 .I sock
949
950 .B RPC_ANYSOCK
951 でも良い。この場合は新しいソケットが作成される。
952 もしソケットがローカルな TCP ポートに bind されていない場合は、
953 このルーティンが適当なポートに bind する。
954 補完された場合、\fIxprt\->xp_sock\fR には通信のソケット・
955 ディスクリプターが、\fIxprt\->xp_port\fR には通信のポート番号が
956 設定される。
957 このルーティンは失敗した場合は NULL を返す。
958 TCP に基づいた RPC はバッファされた I/O を使用するため、
959 ユーザはバッファの大きさを指定できる。
960 ゼロを指定した場合は適切なデフォルトが選択される。
961 .LP
962 .nf
963 .BI "SVCXPRT *svcudp_bufcreate(int " sock ", unsigned int " sendsize ,
964 .BI "                          unsigned int " recosize );
965 .fi
966 .IP
967 このルーティンは UDP/IP に基づいた RPC サービス通信を作成し、
968 そのポインターを返す。通信はソケット
969 .I sock
970 に関連付けられる。
971 .I sock
972
973 .B RPC_ANYSOCK
974 でも良い。この場合は新しいソケットが作成される。
975 ソケットがローカルの UDP ポートに bind されていない場合には
976 このルーティンは適当なポートに bind する。
977 補完された場合、\fIxprt\->xp_sock\fR に通信のソケットの
978 ディスクリプターが、\fIxprt\->xp_port\fR に通信のポート番号が
979 設定される。このルーティンは失敗した場合には NULL を返す。
980 .IP
981 これによりユーザは UDP に基づいた RPC メッセージで
982 使用できる送信パケットおよび受信パケットの最大サイズを指定できる。
983 .LP
984 .nf
985 .BI "SVCXPRT *svcudp_create(int " sock );
986 .fi
987 .IP
988 送信パケットと受信パケットのサイズを同じデフォルトの値 \fISZ\fP に指定した
989 \fIsvcudp_bufcreate(sock,SZ,SZ)\fP と等価である。
990 .LP
991 .nf
992 .BI "bool_t xdr_accepted_reply(XDR *" xdrs ", struct accepted_reply *" ar );
993 .fi
994 .IP
995 RPC 応答メッセージをエンコードするのに使用する。このルーティンは
996 RPC パッケージを用いずに
997 RPC-形式のメッセージを作成しようとする場合に便利である。
998 .LP
999 .nf
1000 .BI "bool_t xdr_authunix_parms(XDR *" xdrs ", struct authunix_parms *" aupp );
1001 .fi
1002 .IP
1003 UNIX 形式の証明書を記述するために使用する。このルーティンは
1004 RPC 認証パッケージを使用せずにこれらの証明書を作成しようとする場合に便利である。
1005 .LP
1006 .nf
1007 .BI "void xdr_callhdr(XDR *" xdrs ", struct rpc_msg *" chdr );
1008 .fi
1009 .IP
1010 RPC 呼び出しのヘッダー・メッセージを記述するために使用する。
1011 このルーティンは RPC パッケージを使用せずに
1012 RPC-形式のメッセージを作成しようとする場合に便利である。
1013 .LP
1014 .nf
1015 .BI "bool_t xdr_callmsg(XDR *" xdrs ", struct rpc_msg *" cmsg );
1016 .fi
1017 .IP
1018 RPC 呼び出しメッセージを記述するのに使用する。
1019 このルーティンは RPC パッケージを使用せずに
1020 RPC-形式のメッセージを作成しようとする場合に便利である。
1021 .LP
1022 .nf
1023 .BI "bool_t xdr_opaque_auth(XDR *" xdrs ", struct opaque_auth *" ap );
1024 .fi
1025 .IP
1026 PRC 認証情報メッセージを記述するために使用する。
1027 このルーティンは RPC パッケージを使用せずに
1028 RPC-形式のメッセージを作成しようとする場合に便利である。
1029 .LP
1030 .nf
1031 .BI "bool_t xdr_pmap(XDR *" xdrs ", struct pmap *" regs );
1032 .fi
1033 .IP
1034 各種の
1035 .B portmap
1036 プロシジャへのパラメーターを外部的に記述するために使用する。
1037 このルーティンは
1038 .B pmap
1039 インターフェースを使用せずに、これらのパラメーターを
1040 作成したい場合に便利である。
1041 .LP
1042 .nf
1043 .BI "bool_t xdr_pmaplist(XDR *" xdrs ", struct pmaplist **" rp );
1044 .fi
1045 .IP
1046 ポートのマッピングのリストを外部的に記述するために使用する。
1047 このルーティンは
1048 .B pmap
1049 インターフェースを使用せずに、これらのパラメーターを
1050 作成したい場合に便利である。
1051 .LP
1052 .nf
1053 .BI "bool_t xdr_rejected_reply(XDR *" xdrs ", struct rejected_reply *" rr );
1054 .fi
1055 .IP
1056 RPC 応答メッセージを記述するために使用する。このルーティンは
1057 RPC パッケージを使用せずに、
1058 RPC-形式のメッセージを作成したい場合に便利である。
1059 .LP
1060 .nf
1061 .BI "bool_t xdr_replymsg(XDR *" xdrs ", struct rpc_msg *" rmsg );
1062 .fi
1063 .IP
1064 RPC 応答メッセージを記述するために使用する。
1065 このルーティンは RPC パッケージを使用せずに、
1066 RPC 形式のメッセージを作成したい場合に便利である。
1067 .LP
1068 .nf
1069 .BI "void xprt_register(SVCXPRT *" xprt );
1070 .fi
1071 .IP
1072 RPC サービス通信ハンドルを生成した後に、それら自身を
1073 RPC サービス・パッケージに登録する必要がある。
1074 このルーティンは大域変数
1075 .I svc_fds
1076 を修正する。サービスの実装者は通常、このルーティンは必要ない。
1077 .LP
1078 .nf
1079 .BI "void xprt_unregister(SVCXPRT *" xprt );
1080 .fi
1081 .IP
1082 RPC サービス通信ハンドルを破壊する前に、それを
1083 RPC 通信パッケージから登録解除する必要がある。
1084 このルーティンは大域変数
1085 .I svc_fds
1086 を修正する。サービスの実装者は通常、このルーティンは必要ない。
1087 .SH 関連項目
1088 .\" 今現在は、この配布物 (LDP_man-pages) には rpc_secure.3 は入っていない
1089 .\" -- MTK, 19 Sep 05
1090 .\" .BR rpc_secure (3),
1091 .BR xdr (3)
1092 .br
1093 以下のマニュアル:
1094 .RS
1095 Remote Procedure Calls: Protocol Specification
1096 .br
1097 Remote Procedure Call Programming Guide
1098 .br
1099 rpcgen Programming Guide
1100 .br
1101 .RE
1102 .IR "RPC: Remote Procedure Call Protocol Specification" ,
1103 RFC\ 1050, Sun Microsystems, Inc.,
1104 USC-ISI.