1 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
3 .\" %%%LICENSE_START(BSD_ONELINE_CDROM)
4 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
7 .\" @(#)rpc.3n 2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI
9 .\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
11 .\"*******************************************************************
13 .\" This file was generated with po4a. Translate the source file.
15 .\"*******************************************************************
17 .\" Japanese Version Copyright (c) 1999 HANATAKA Shinya
18 .\" all rights reserved.
19 .\" Translated Tue Jan 4 20:48:23 JST 2000
20 .\" by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
21 .\" Updated & Modified Sun Oct 21 01:07:09 JST 2001
22 .\" by Yuichi SATO <ysato@h4.dion.ne.jp>
24 .TH RPC 3 2013\-09\-26 "" "Linux Programmer's Manual"
26 rpc \- 遠隔手続き呼び出し(RPC)のためのライブラリ・ルーティン
29 .\" We don't have an rpc_secure.3 page at the moment -- MTK, 19 Sep 05
30 .\" Routines that are used for Secure RPC (DES authentication) are described in
31 .\" .BR rpc_secure (3).
32 .\" Secure RPC can be used only if DES encryption is available.
33 これらのルーティンは C プログラムでネットワークを通して 他のマシンにアクセスするプロシジャを作成することを可能にする。
34 最初にクライアントはデータパケットをサーバに送るために プロシジャを呼び出す。 サーバはパケットを受け取ると、配分ルーチンを呼び出して
35 要求されたサービスに実行し、返答を送り返す。 最後にプロシジャ・コールはクライアントへと戻る。
37 これらのルーティンを使用するには、ヘッダファイル \fI<rpc/rpc.h>\fP をインクルードすること。
39 下記のプロトタイプでは次の型を使用している。
43 \fBtypedef int \fP\fIbool_t\fP\fB;\fP
45 \fBtypedef bool_t (*\fP\fIxdrproc_t\fP\fB) (XDR *, void *, ...);\fP
47 \fBtypedef bool_t (*\fP\fIresultproc_t\fP\fB) (caddr_t \fP\fIresp\fP\fB,\fP
48 \fB struct sockaddr_in *\fP\fIraddr\fP\fB);\fP
52 型 \fIAUTH\fP, \fICLIENT\fP, \fISVCXPRT\fP, \fIXDR\fP の宣言についてはヘッダファイルを参照。
55 \fBvoid auth_destroy(AUTH *\fP\fIauth\fP\fB);\fP
58 このマクロは \fIauth\fP に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の 破棄を含んでいる。 \fBauth_destroy\fP()
59 を呼び出した後に \fIauth\fP を使用することは未定義である。
62 \fBAUTH *authnone_create(void);\fP
65 各リモート・プロシジャ・コールで使用できない仮の認証情報として渡される RPC 認証ハンドルを作成して返す。 これは RPC
69 \fBAUTH *authunix_create(char *\fP\fIhost\fP\fB, int \fP\fIuid\fP\fB, int \fP\fIgid\fP\fB,\fP
70 \fB int \fP\fIlen\fP\fB, int *\fP\fIaup_gids\fP\fB);\fP
73 認証情報を含んだ RPC 認証ハンドルを作成して返す。 \fIhost\fP パラメーターは情報が作成されたマシンの名前である。 \fIuid\fP
76 、 \fIgid\fP はそのユーザの現在のグループ
79 \fIaup_gids\fP はそのユーザが所属するグループの配列を参照している。 他のユーザになりすますことは簡単である。
82 \fBAUTH *authunix_create_default(void);\fP
85 適切なパラメーターで \fBauthunix_create\fP() を呼び出す。
88 \fBint callrpc(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP
89 \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
90 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
91 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
94 マシン \fIhost\fP 上で \fIprognum\fP, \fIversnum\fP, \fIprocnum\fP に関連付けられたリモート・プロシジャを呼び出す。
95 パラメーター \fIin\fP はプロシジャの引き数のアドレスであり \fIout\fP は結果を格納するアドレスである。 \fIinproc\fP
96 はプロシジャのパラメーターをエンコードするのに使用され、 \fIoutproc\fP は結果をデコードするのに使用される。
97 このルーティンは成功した場合にはゼロを返す。失敗した場合には \fBenum clnt_stat\fP を整数にキャストした値を返す。
98 \fBclnt_perrno\fP() ルーティンが失敗の状態をメッセージに変換するのに使用できる。
100 警告: このルーティンでリモート・プロシジャを呼び出すと通信には UDP/IP が使用される。この際の制限については
101 \fBclntudp_create\fP() を参照すること。このルーティンを使用して認証や時間切れの制御を することはできない。
104 \fBenum clnt_stat clnt_broadcast(unsigned long \fP\fIprognum\fP\fB,\fP
105 \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
106 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
107 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
108 \fB resultproc_t \fP\fIeachresult\fP\fB);\fP
111 \fBcallrpc\fP() と同様であるが、メッセージがローカルのブロードキャスト・ネットワーク
112 全体へとブロードキャストされる点が異っている。回答を受け取る度に このルーティンは以下の形式の \fBeachresult\fP() を呼び出す。
116 \fBeachresult(char *\fP\fIout\fP\fB, struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
120 ここで \fIout\fP は \fBclnt_broadcast\fP() に渡される \fIout\fP
121 と同じであるが、リモート・プロシジャからの出力がデコードされている 点のみが異っている。 \fIaddr\fP
122 は結果を送って来たマシンのアドレスを指している。 \fBeachresult\fP() がゼロを返した場合、 \fBclnt_broadcast\fP()
123 はさらなる回答を待つ。そうでなければ適切な状態で終了する。
125 警告: ブロードキャスト・ソケットはデータリンク層の最大転送単位に 制限されている。イーサネットの場合、最大値は 1500 バイトである。
128 \fBenum clnt_stat clnt_call(CLIENT *\fP\fIclnt\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
129 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
130 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
131 \fB struct timeval \fP\fItout\fP\fB);\fP
134 このマクロはクライアント・ハンドル \fIclnt\fP に関連付けられた \fIprocnum\fP リモート・プロシジャを呼び出す。 クライアント・ハンドルは
135 \fBclnt_create\fP() のような
137 クライアント作成ルーティンによって得られる。 パタメータ \fIin\fP
138 はプロシジャの引き数のアドレスである。 \fIout\fP はプロシジャの返り値を格納するアドレスである。 \fIinproc\fP
139 はプロシジャのパラメーターをエンコードするのに使用される。 \fIoutproc\fP はプロシジャの返り値をデコードするのに使用される。 \fItout\fP
143 \fBclnt_destroy(CLIENT *\fP\fIclnt\fP\fB);\fP
146 このマクロはクライアントの RPC ハンドルを破壊する。破壊には通常は \fIclnt\fP 自身も含めて私的なデータ構造体の破棄が含まれている。
147 \fBclnt_destroy\fP() の呼び出しの後に \fIclnt\fP を使用することは未定義である。 RPC
148 ライブラリが関連するソケットをオープンした場合には、 それも閉じられる。それ以外の場合にはソケットはオープンされたままである。
151 \fBCLIENT *clnt_create(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprog\fP\fB,\fP
152 \fB unsigned long \fP\fIvers\fP\fB, char *\fP\fIproto\fP\fB);\fP
155 一般的なクライアントの作成ルーティンである。 \fIhost\fP はサーバのあるリモートホストの名前を指定する。 \fIproto\fP
156 どのような通信プロトコルを使用するかを指定する。現在ここに 使用できる値は \(lqudp\(rq と \(lqtcp\(rq である。
157 デフォルトの時間切れが設定されるが、 \fBclnt_control\fP() を使用して変更可能である。
159 警告: UDP を使用した場合には欠点がある。 UDP に基づいた RPC メッセージは 最大でも 8 KByte のエンコードデータしか保持する
160 ことができないため、大きな引き数や巨大な結果を取るプロシジャに は使用することができない。
163 \fBbool_t clnt_control(CLIENT *\fP\fIcl\fP\fB, int \fP\fIreq\fP\fB, char *\fP\fIinfo\fP\fB);\fP
166 このマクロは各種クライアントについて情報を変更したり、取得したり するのに使用する。 \fIreq\fP は操作の種類を指定する。 \fIinfo\fP
167 は情報へのポインターである。 UDP と TCP どちらの場合も使用可能な \fIreq\fP の値と、その引き数の型、およびその内容は以下の通りである:
171 \fBCLSET_TIMEOUT\fP \fIstruct timeval\fP // 時間切れを設定する
172 \fBCLGET_TIMEOUT\fP \fIstruct timeval\fP // 時間切れを取得する
176 注意: \fBclnt_control\fP() を使用して時間切れを設定した場合にはそれ以後は \fBclnt_call\fP()
177 に渡される時間切れパラメーターは全て無視される。
181 \fBCLGET_SERVER_ADDR\fP \fIstruct sockaddr_in \fP // サーバアドレスを取得する
185 以下の操作は UDP の場合にのみ有効である:
189 \fBCLSET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // 再送間隔を設定する
190 \fBCLGET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // 再送間隔を取得する
194 再送間隔は次に要求を再送する前に "UDP RPC" がサーバの回答を待つ時間である。
197 \fBclnt_freeres(CLIENT * \fP\fIclnt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
200 このマクロは RPC 呼び出しの結果のデコードの際に RPC/XDR システムによって割当てられたデータを解放する。 パラメーター \fIout\fP
201 は結果のアドレスである。 \fIoutproc\fP は結果を記述している XDR ルーティンである。 このルーティンは結果の解放に成功した場合には 1
205 \fBvoid clnt_geterr(CLIENT *\fP\fIclnt\fP\fB, struct rpc_err *\fP\fIerrp\fP\fB);\fP
208 このマクロはクライアント・ハンドルのエラー構造体を \fIerrp\fP アドレスで指定された構造体へコピーする。
211 \fBvoid clnt_pcreateerror(char *\fP\fIs\fP\fB);\fP
214 標準エラー出力に、なぜクライアント RPC ハンドルの作成が できなかったかについてのメッセージを表示する。 メッセージの前に文字列 \fIs\fP
215 とコロン(:)が表示される。 \fBclnt_create\fP(), \fBclntraw_create\fP(), \fBclnttcp_create\fP(),
216 \fBclntudp_create\fP() の呼び出しが失敗した時に使用すること。
219 \fBvoid clnt_perrno(enum clnt_stat \fP\fIstat\fP\fB);\fP
222 標準エラー出力に \fIstat\fP によって指示されるエラー状態に対応するメッセージを表示する。 \fBcallrpc\fP() の後に使用すること。
225 \fBclnt_perror(CLIENT *\fP\fIclnt\fP\fB, char *\fP\fIs\fP\fB);\fP
228 標準エラー出力に、なぜ RPC 呼び出しが失敗したかについてのメッセージを表示する。 \fIclnt\fP はコールに使用したハンドルである。
229 メッセージの前に文字列 \fIs\fP とコロン(:)が表示される。 \fBclnt_call\fP() が失敗した後に使用すること。
232 \fBchar *clnt_spcreateerror(char *\fP\fIs\fP\fB);\fP
235 \fBclnt_pcreateerror\fP() と同様であるが、標準エラー出力へ表示するかわりに文字列を返す点が異っている。
237 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
240 \fBchar *clnt_sperrno(enum clnt_stat \fP\fIstat\fP\fB);\fP
243 \fBclnt_perrno\fP() と同じ引き数を取るが、なぜ RPC 呼び出しが失敗したかについてのメッセージを標準エラー出力に表示する
244 かわりに、メッセージを格納している文字列へのポインターを返す。 文字列は NEWLINE(改行) で終っている。
246 \fBclnt_sperrno\fP() はプログラムが標準エラー出力を持っていない場合(プログラムがサーバとし
247 て走っている場合にはよくありえる)や、プログラマーがメッセージを \fBprintf\fP(3) で出力することを望まない場合や、メッセージの形式が
248 \fBclnt_perrno\fP() がサポートするものとは異っている場合などに \fBclnt_perrno\fP() のかわりに使用される。 注意:
249 \fBclnt_sperror\fP() や \fBclnt_spcreaterror\fP() とは違って \fBclnt_sperrno\fP()
250 は静的データへのポインターを返す。しかし呼び出しごとに上書きされることはない。
253 \fBchar *clnt_sperror(CLIENT *\fP\fIrpch\fP\fB, char *\fP\fIs\fP\fB);\fP
256 \fBclnt_perror\fP() と同様であるが、標準エラー出力に表示する代りに (\fBclnt_sperrno\fP() のように)
257 文字列へのポインターを返す点が異っている。
259 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
262 \fBCLIENT *clntraw_create(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
265 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための擬似 RPC
266 クライアントを作成する。メッセージをサービスに渡すために使用する 通信は実際にはそのプロセスのアドレス空間にあるバッファーである。 それで、対応する
267 RPC サーバが同じアドレス空間の中にいなければならない。 \fBsvcraw_create\fP() を参照すること。 これにより RPC
268 のシミュレーションや、カーネル・インターフェースに影響されずに 応答時間などの RPC オーバヘッドの獲得ができる。 失敗した場合にはこのルーティンは
272 \fBCLIENT *clnttcp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
273 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
274 \fB int *\fP\fIsockp\fP\fB, unsigned int \fP\fIsendsz\fP\fB, unsigned int \fP\fIrecvsz\fP\fB);\fP
277 .\"The following inline font conversion is necessary for the hyphen indicator
278 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
279 クライアントを作成する。クライアントは通信に TCP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
280 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
281 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
282 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
283 に設定する。 TCP に基づいた RPC はバッファされた I/O を使用するため、ユーザはパラメーター \fIsendsz\fP と \fIrecvsz\fP
284 を使用して送信バッファと受信バッファのサイズを指定することができる。 ゼロを指定した場合には適切なデフォルトが選択される。
285 このルーティンは失敗した場合は NULL を返す。
288 \fBCLIENT *clntudp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
289 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
290 \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB);\fP
293 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
294 クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
295 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
296 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
297 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
298 に設定する。 UDP 通信は回答があるか、時間切れが起こるまで \fBwait\fP 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
299 \fBclnt_call\fP() で指定する。
301 警告: UDP に基づいた RPC メッセージは最大でも 8 Kbyte までのエンコードされたデータしか
302 保持できないため、この通信は大きな引き数や巨大な結果を取る プロシジャには使用できない。
305 \fBCLIENT *clntudp_bufcreate(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
306 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
307 \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB,\fP
308 \fB unsigned int \fP\fIsendsize\fP\fB, unsigned int \fP\fIrecosize\fP\fB);\fP
311 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
312 クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
313 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
314 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
315 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
316 に設定する。 UDP 通信は回答があるか、時間切れが起こるまで \fBwait\fP 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
317 \fBclnt_call\fP() で指定する。
319 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。
322 \fBvoid get_myaddress(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
325 このマシンの IP アドレスを \fI*addr\fP に格納する。 \fI/etc/hosts\fP を扱うライブラリ・ルーティンは使用しない。ポート番号は常に
326 \fBhtons(PMAPPORT)\fP に設定される。
329 \fBstruct pmaplist *pmap_getmaps(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
332 \fBportmap\fP サービスのためのユーザインターフェースであり、 IP アドレス \fI*addr\fP にあるホストの現在の RPC
333 プログラムからポート番号へのマッピングの一覧を返す。 このルーティンが NULL を返す場合もある。 `\fBrpcinfo \-p\fP'
337 \fBunsigned short pmap_getport(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
338 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
339 \fB unsigned int \fP\fIprotocol\fP\fB);\fP
342 \fBportmap\fP サービスのためのユーザ・インターフェースで、 プログラム番号 \fIprognum\fP、 バージョン \fIversnum\fP、
343 関連付けられた通信プロトコル \fIprotocol\fP をサポートするサービスが待っているポート番号を返す。 \fIprotocol\fP の値はほとんどの場合
344 IPPROTO_UDP か IPPROTO_TCP である。 返り値ゼロはマッピングが存在しないか、 RPC システムがリモートの \fBportmap\fP
345 サービスの参照に失敗したことを意味する。後者の場合は大域変数 \fIrpc_createerr\fP が RPC 状態を保持している。
348 \fBenum clnt_stat pmap_rmtcall(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
349 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
350 \fB unsigned long \fP\fIprocnum\fP\fB,\fP
351 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
352 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
353 \fB struct timeval \fP\fItout\fP\fB, unsigned long *\fP\fIportp\fP\fB);\fP
356 \fBportmap\fP サービスのためのユーザ・インターフェースで、 IP アドレス \fI*addr\fP のホストの \fBportmap\fP を参照して、
357 RPC 呼び出しを生成し、そのホスト上のプロシジャを呼び出す。 パラメーター \fI*portp\fP
358 はプロシジャが成功した場合にはプログラムのポート番号に修正される。 他のパラメーターの定義については \fBcallrpc\fP() や
359 \fBclnt_call\fP() で説明してある。 このプロシジャは \(lqping\(rq のみに使用すべきである。
360 \fBclnt_broadcast\fP() も参照すること。
363 \fBbool_t pmap_set(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
364 \fB unsigned int \fP\fIprotocol\fP\fB, unsigned short \fP\fIport\fP\fB);\fP
367 \fBportmap\fP サービスのためのユーザ・インターフェースで、 [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP]
368 の組み合わせと \fIport\fP との間のマッピングを、そのマシン上の \fBportmap\fP サービスに登録する。 \fIprotocol\fP
369 はほとんどの場合 \fBIPPROTO_UDP\fP か \fBIPPROTO_TCP\fP のどちらかである。 このルーティンは成功した場合には 1
370 を返す。失敗した場合にはゼロを返す。 \fBsvc_register\fP() によって自動的に実行される。
373 \fBbool_t pmap_unset(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
376 \fBportmap\fP サービスのためのユーザ・インターフェースで、 [\fIprognum\fP,\fIversnum\fP,\fI*\fP] の組み合わせと
377 \fBports\fP の間のマッピングをそのマシン上の \fBportmap\fP サービスから削除する。このルーティンは成功した場合は 1 を返す。
381 \fBint registerrpc(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
382 \fB unsigned long \fP\fIprocnum\fP\fB, char *(*\fP\fIprocname\fP\fB)(char *),\fP
383 \fB xdrproc_t \fP\fIinproc\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB);\fP
386 RPC サービスパッケージを使用して \fIprocname\fP プロシジャを登録する。プログラム \fIprognum\fP、 バージョン
387 \fIversnum\fP、 プロシジャ \fIprocnum\fP への要求が届いた場合、 \fIprocname\fP
388 がパラメーターへのポインターを持って呼び出される。 \fIprogname\fP は静的な結果へのポインターを返す必要がある。 \fIinproc\fP
389 はパラメーターをデコードするために使用される。 \fIoutproc\fP は結果をエンコードするために使用される。
390 このルーティンは登録に成功した場合にはゼロを返す。 失敗した場合には \-1 を返す。
392 警告: この形式で登録されたリモート・プロシジャは UDP/IP 通信を使用する。制限に関しては \fBsvcudp_create\fP()
396 \fBstruct rpc_createerr \fP\fIrpc_createerr\fP\fB;\fP
399 成功しなかった RPC クライアント生成ルーティンによって設定される大域変数。 \fBclnt_pcreateerror\fP()
400 ルーティンが理由を表示するために使用する。
403 \fBvoid svc_destroy(SVCXPRT *\fP\fIxprt\fP\fB);\fP
406 このマクロは通信ハンドル \fIxprt\fP の RPC サービスを破壊する。破壊には通常、 \fIxprt\fP
407 を含めて、私的なデータ構造体の破棄が含まれている。 このルーティンを呼び出した後に \fIxprt\fP を使用することは未定義である。
410 \fBfd_set \fP\fIsvc_fdset\fP\fB;\fP
413 RPC サービス側のファイル・ディスクリプターのビットマスクを反映した大域変数。 \fBselect\fP(2)
414 システムコールのパラメーターのために利用できる。これは、サービスの実装者が \fBsvc_run\fP()
415 を呼び出さずに、独自の非同期イベント処理を用いる場合にのみ意味がある。 この変数は読み込み専用で (そのまま \fBselect\fP(2)
416 へ渡してはならない!)、 \fBsvc_getreqset\fP() 呼び出しや生成ルーティンの後に変更されているかもしれない。
419 \fBint \fP\fIsvc_fds\fP\fB;\fP
422 \fBsvc_fdset\fP に似ているが、32 ディスクリプターに制限されている。 このインターフェースは \fBsvc_fdset\fP
426 \fBsvc_freeargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP
429 このマクロはサービス・プロシジャが \fBsvc_getargs\fP() を使用して引き数をデコードした時に RPC/XDR
430 システムによって割り当てられたデータを解放する。 このルーティンは解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。
433 \fBsvc_getargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP
436 このマクロは RPC サービス通信ハンドル \fIxprt\fP に関連付けられた RPC 要求の引き数をデコードする。パラメーター \fIin\fP
437 は引き数の格納されたアドレスである。 \fIinproc\fP は引き数をデコードするための XDR ルーティンである。
438 このルーティンはデコードに成功した場合は 1 を返す。 失敗した場合はゼロを返す。
441 \fBstruct sockaddr_in *svc_getcaller(SVCXPRT *\fP\fIxprt\fP\fB);\fP
444 RPC サービス通信ハンドル \fIxprt\fP に関連付けられたプロシジャの呼び出し元のネットワーク・アドレスを 取得するための標準的な手段。
447 \fBvoid svc_getreqset(fd_set *\fP\fIrdfds\fP\fB);\fP
450 このルーティンはサービスの実装者が \fBsvc_run\fP() を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。 これは
451 \fBselect\fP(2) システムコールが RPC ソケットに RPC 要求が到着したと返した場合にのみ呼び出される。 \fIrdfds\fP
452 は結果の読み込みファイル・ディスクリプターのビットマスクである。 このルーティンは \fIrdfds\fP
453 の値に関連付けられた全てのソケットのサービスが行なわれた時に 返ってくる。
456 \fBvoid svc_getreq(int \fP\fIrdfds\fP\fB);\fP
459 \fBsvc_getreqset\fP() に似ているがディスクリプターの数が 32 に制限されている。 このインターフェースは
460 \fBsvc_getreqset\fP() によって置き換えられた。
463 \fBbool_t svc_register(SVCXPRT *\fP\fIxprt\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP
464 \fB unsigned long \fP\fIversnum\fP\fB,\fP
465 \fB void (*\fP\fIdispatch\fP\fB)(svc_req *, SVCXPRT *),\fP
466 \fB unsigned long \fP\fIprotocol\fP\fB);\fP
469 \fIprognum\fP と \fIversnum\fP をサービス配分プロシジャ \fIdispatch\fP で関連付ける。 \fIprotocol\fP
470 がゼロの場合、サービスは \fBportmap\fP サービスには登録されない。 \fIprotocol\fP がゼロ以外の場合、
471 [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP] の組み合わせと \fIxprt\->xp_port\fP
472 とのマッピングがローカルの \fBportmap\fP サービスに登録される。(一般的に \fIprotocol\fP はゼロ、 \fBIPPROTO_UDP\fP、
473 \fBIPPROTO_TCP\fP のどれかである。) プロシジャ \fIdispatch\fP は以下の形式である:
477 dispatch(struct svc_req *request, SVCXPRT *xprt);
481 \fBsvc_register\fP() ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
484 \fBvoid svc_run(void);\fP
489 要求の到着を待ち、どれかが届いた場合に \fBsvc_getreq\fP()
490 を使用して適切なサービス・プロシジャを呼び出す。 このプロシジャは通常は \fBselect\fP(2) システムコールから返るのを待っている。
493 \fBbool_t svc_sendreply(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
496 RPC サービス配分ルーティンによってリモート・プロシジャ・コールの結果を 返すために呼び出される。 パラメーター \fIxprt\fP
497 はその要求に関連付けられた通信ハンドルである。 \fIoutproc\fP は結果をエンコードするために使用する XDR ルーティンである。 \fIout\fP
498 は結果のアドレスである。このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
501 \fBvoid svc_unregister(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
504 配分ルーティンから [\fIprognum\fP,\fIversnum\fP] および [\fIprognum\fP,\fIversnum\fP,\fI*\fP]
505 の組み合わせからポート番号へのマッピングを全て削除する。
508 \fBvoid svcerr_auth(SVCXPRT *\fP\fIxprt\fP\fB, enum auth_stat \fP\fIwhy\fP\fB);\fP
511 認証エラーによりリモート・プロシジャ・コールの実行を拒否された 場合にサービス配分ルーティンによって呼び出される。
514 \fBvoid svcerr_decode(SVCXPRT *\fP\fIxprt\fP\fB);\fP
517 パラメータのデコードに失敗した場合に サービス配分ルーティンによって呼び出される。 \fBsvc_getargs\fP() も参照すること。
520 \fBvoid svcerr_noproc(SVCXPRT *\fP\fIxprt\fP\fB);\fP
523 要求のあったプロシジャ番号が実装されていない場合に サービス配分ルーティンより呼び出される。
526 \fBvoid svcerr_noprog(SVCXPRT *\fP\fIxprt\fP\fB);\fP
529 RPC パッケージに要求されたプログラムが登録されていない場合に呼び出される。 サービスの実装には通常、このルーティンは必要ない。
532 \fBvoid svcerr_progvers(SVCXPRT *\fP\fIxprt\fP\fB);\fP
535 RPC パッケージに要求されたバージョンのプログラムが登録されていない場合に 呼び出される。サービスの実装には通常、このルーティンは必要ない。
538 \fBvoid svcerr_systemerr(SVCXPRT *\fP\fIxprt\fP\fB);\fP
541 特定のプロトコルによってカバーされていなシステム・エラーが 検出された場合にサービス配分ルーティンによって呼び出される。
542 例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には このルーティンが呼び出されるかもしれない。
545 \fBvoid svcerr_weakauth(SVCXPRT *\fP\fIxprt\fP\fB);\fP
548 認証パラメータが足りないためにリモート・プロシジャ・コールの実行を 拒否された場合にサービス配分ルーティンによって呼び出される。 このルーティンは
549 \fBsvcerr_auth(xprt, AUTH_TOOWEAK)\fP を呼び出す。
552 \fBSVCXPRT *svcfd_create(int \fP\fIfd\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
553 \fB unsigned int \fP\fIrecvsize\fP\fB);\fP
556 任意のオープンされたディスクリプター上にサービスを作成する。 典型的に、ディスクリプターは TCP
557 のようなストリーム・プロトコルで接続されたソケットである。 \fIsendsize\fP と \fIrecvsize\fP
558 には送信バッファと受信バッファの大きさを指定する。もしゼロが指定された 場合は適切なデフォルトが選択される。
561 \fBSVCXPRT *svcraw_create(void);\fP
564 このルーティンは擬似 RPC サービス通信を生成して、そのポインターを返す。 通信は実際にはそのプロセスのアドレス空間にあるバッファなので 対応する
565 RPC クライアントは同じアドレス空間にいる必要がある。 \fBclntraw_create\fP() を参照すること。 このルーティンで RPC
566 のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの RPC オーバヘッドを取得ができる。このルーティンは失敗した場合は
570 \fBSVCXPRT *svctcp_create(int \fP\fIsock\fP\fB, unsigned int \fP\fIsend_buf_size\fP\fB,\fP
571 \fB unsigned int \fP\fIrecv_buf_size\fP\fB);\fP
574 このルーティンは TCP/IP に基づく RPC サービス通信を作成し、それへのポインターを返す。 通信はソケット \fIsock\fP に結びつけられる。
575 \fIsock\fP は \fBRPC_ANYSOCK\fP でも良い。この場合は新しいソケットが作成される。 もしソケットがローカルな TCP ポートに bind
576 されていない場合は、 このルーティンが適当なポートに bind する。 補完された場合、\fIxprt\->xp_sock\fP には通信のソケット・
577 ディスクリプターが、\fIxprt\->xp_port\fP には通信のポート番号が 設定される。 このルーティンは失敗した場合は NULL を返す。
578 TCP に基づいた RPC はバッファされた I/O を使用するため、 ユーザはバッファの大きさを指定できる。
579 ゼロを指定した場合は適切なデフォルトが選択される。
582 \fBSVCXPRT *svcudp_bufcreate(int \fP\fIsock\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
583 \fB unsigned int \fP\fIrecosize\fP\fB);\fP
586 このルーティンは UDP/IP に基づいた RPC サービス通信を作成し、 そのポインターを返す。通信はソケット \fIsock\fP に関連付けられる。
587 \fIsock\fP は \fBRPC_ANYSOCK\fP でも良い。この場合は新しいソケットが作成される。 ソケットがローカルの UDP ポートに bind
588 されていない場合には このルーティンは適当なポートに bind する。 補完された場合、\fIxprt\->xp_sock\fP に通信のソケットの
589 ディスクリプターが、\fIxprt\->xp_port\fP に通信のポート番号が 設定される。このルーティンは失敗した場合には NULL を返す。
591 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。
594 \fBSVCXPRT *svcudp_create(int \fP\fIsock\fP\fB);\fP
597 送信パケットと受信パケットのサイズを同じデフォルトの値 \fISZ\fP に指定した \fIsvcudp_bufcreate(sock,SZ,SZ)\fP
601 \fBbool_t xdr_accepted_reply(XDR *\fP\fIxdrs\fP\fB, struct accepted_reply *\fP\fIar\fP\fB);\fP
604 RPC 応答メッセージをエンコードするのに使用する。このルーティンは RPC パッケージを用いずに
605 RPC\-形式のメッセージを作成しようとする場合に便利である。
608 \fBbool_t xdr_authunix_parms(XDR *\fP\fIxdrs\fP\fB, struct authunix_parms *\fP\fIaupp\fP\fB);\fP
611 UNIX 形式の証明書を記述するために使用する。このルーティンは RPC 認証パッケージを使用せずにこれらの証明書を作成しようとする場合に便利である。
614 \fBvoid xdr_callhdr(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIchdr\fP\fB);\fP
617 RPC 呼び出しのヘッダー・メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに
618 RPC\-形式のメッセージを作成しようとする場合に便利である。
621 \fBbool_t xdr_callmsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIcmsg\fP\fB);\fP
624 RPC 呼び出しメッセージを記述するのに使用する。 このルーティンは RPC パッケージを使用せずに
625 RPC\-形式のメッセージを作成しようとする場合に便利である。
628 \fBbool_t xdr_opaque_auth(XDR *\fP\fIxdrs\fP\fB, struct opaque_auth *\fP\fIap\fP\fB);\fP
631 PRC 認証情報メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに
632 RPC\-形式のメッセージを作成しようとする場合に便利である。
635 \fBbool_t xdr_pmap(XDR *\fP\fIxdrs\fP\fB, struct pmap *\fP\fIregs\fP\fB);\fP
638 各種の \fBportmap\fP プロシジャへのパラメーターを外部的に記述するために使用する。 このルーティンは \fBpmap\fP
639 インターフェースを使用せずに、これらのパラメーターを 作成したい場合に便利である。
642 \fBbool_t xdr_pmaplist(XDR *\fP\fIxdrs\fP\fB, struct pmaplist **\fP\fIrp\fP\fB);\fP
645 ポートのマッピングのリストを外部的に記述するために使用する。 このルーティンは \fBpmap\fP インターフェースを使用せずに、これらのパラメーターを
649 \fBbool_t xdr_rejected_reply(XDR *\fP\fIxdrs\fP\fB, struct rejected_reply *\fP\fIrr\fP\fB);\fP
652 RPC 応答メッセージを記述するために使用する。このルーティンは RPC パッケージを使用せずに、
653 RPC\-形式のメッセージを作成したい場合に便利である。
656 \fBbool_t xdr_replymsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIrmsg\fP\fB);\fP
659 RPC 応答メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに、 RPC
660 形式のメッセージを作成したい場合に便利である。
663 \fBvoid xprt_register(SVCXPRT *\fP\fIxprt\fP\fB);\fP
666 RPC サービス通信ハンドルを生成した後に、それら自身を RPC サービス・パッケージに登録する必要がある。 このルーティンは大域変数
667 \fIsvc_fds\fP を修正する。サービスの実装者は通常、このルーティンは必要ない。
670 \fBvoid xprt_unregister(SVCXPRT *\fP\fIxprt\fP\fB);\fP
673 RPC サービス通信ハンドルを破壊する前に、それを RPC 通信パッケージから登録解除する必要がある。 このルーティンは大域変数 \fIsvc_fds\fP
674 を修正する。サービスの実装者は通常、このルーティンは必要ない。
676 .\" We don't have an rpc_secure.3 page in the set at the moment -- MTK, 19 Sep 05
677 .\" .BR rpc_secure (3),
682 Remote Procedure Calls: Protocol Specification
684 Remote Procedure Call Programming Guide
686 rpcgen Programming Guide
690 \fIRPC: Remote Procedure Call Protocol Specification\fP, RFC\ 1050, Sun
691 Microsystems, Inc., USC\-ISI.
693 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
694 である。プロジェクトの説明とバグ報告に関する情報は
695 http://www.kernel.org/doc/man\-pages/ に書かれている。