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 .\"*******************************************************************
16 .TH RPC 3 2008\-07\-17 "" "Linux Programmer's Manual"
18 rpc \- 遠隔手続き呼び出し(RPC)のためのライブラリ・ルーティン
21 .\" We don't have an rpc_secure.3 page at the moment -- MTK, 19 Sep 05
22 .\" Routines that are used for Secure RPC (DES authentication) are described in
23 .\" .BR rpc_secure (3).
24 .\" Secure RPC can be used only if DES encryption is available.
25 これらのルーティンは C プログラムでネットワークを通して 他のマシンにアクセスするプロシジャを作成することを可能にする。
26 最初にクライアントはデータパケットをサーバに送るために プロシジャを呼び出す。 サーバはパケットを受け取ると、配分ルーチンを呼び出して
27 要求されたサービスに実行し、返答を送り返す。 最後にプロシジャ・コールはクライアントへと戻る。
29 これらのルーティンを使用するには、ヘッダファイル \fI<rpc/rpc.h>\fP をインクルードすること。
31 下記のプロトタイプでは次の型を使用している。
35 \fBtypedef int \fP\fIbool_t\fP\fB;\fP
37 \fBtypedef bool_t (*\fP\fIxdrproc_t\fP\fB) (XDR *, void *, ...);\fP
39 \fBtypedef bool_t (*\fP\fIresultproc_t\fP\fB) (caddr_t \fP\fIresp\fP\fB,\fP
40 \fB struct sockaddr_in *\fP\fIraddr\fP\fB);\fP
44 型 \fIAUTH\fP, \fICLIENT\fP, \fISVCXPRT\fP, \fIXDR\fP の宣言についてはヘッダファイルを参照。
47 \fBvoid auth_destroy(AUTH *\fP\fIauth\fP\fB);\fP
50 このマクロは \fIauth\fP に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の 破棄を含んでいる。 \fBauth_destroy\fP()
51 を呼び出した後に \fIauth\fP を使用することは未定義である。
54 \fBAUTH *authnone_create(void);\fP
57 各リモート・プロシジャ・コールで使用できない仮の認証情報として渡される RPC 認証ハンドルを作成して返す。 これは RPC
61 \fBAUTH *authunix_create(char *\fP\fIhost\fP\fB, int \fP\fIuid\fP\fB, int \fP\fIgid\fP\fB,\fP
62 \fB int \fP\fIlen\fP\fB, int *\fP\fIaup_gids\fP\fB);\fP
65 認証情報を含んだ RPC 認証ハンドルを作成して返す。 \fIhost\fP パラメーターは情報が作成されたマシンの名前である。 \fIuid\fP
68 、 \fIgid\fP はそのユーザの現在のグループ
71 \fIaup_gids\fP はそのユーザが所属するグループの配列を参照している。 他のユーザになりすますことは簡単である。
74 \fBAUTH *authunix_create_default(void);\fP
77 適切なパラメーターで \fBauthunix_create\fP() を呼び出す。
80 \fBint callrpc(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP
81 \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
82 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
83 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
86 マシン \fIhost\fP 上で \fIprognum\fP, \fIversnum\fP, \fIprocnum\fP に関連付けられたリモート・プロシジャを呼び出す。
87 パラメーター \fIin\fP はプロシジャの引き数のアドレスであり \fIout\fP は結果を格納するアドレスである。 \fIinproc\fP
88 はプロシジャのパラメーターをエンコードするのに使用され、 \fIoutproc\fP は結果をデコードするのに使用される。
89 このルーティンは成功した場合にはゼロを返す。失敗した場合には \fBenum clnt_stat\fP を整数にキャストした値を返す。
90 \fBclnt_perrno\fP() ルーティンが失敗の状態をメッセージに変換するのに使用できる。
92 警告: このルーティンでリモート・プロシジャを呼び出すと通信には UDP/IP が使用される。この際の制限については
93 \fBclntudp_create\fP() を参照すること。このルーティンを使用して認証や時間切れの制御を することはできない。
96 \fBenum clnt_stat clnt_broadcast(unsigned long \fP\fIprognum\fP\fB,\fP
97 \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
98 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
99 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
100 \fB resultproc_t \fP\fIeachresult\fP\fB);\fP
103 \fBcallrpc\fP() と同様であるが、メッセージがローカルのブロードキャスト・ネットワーク
104 全体へとブロードキャストされる点が異っている。回答を受け取る度に このルーティンは以下の形式の \fBeachresult\fP() を呼び出す。
108 \fBeachresult(char *\fP\fIout\fP\fB, struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
112 ここで \fIout\fP は \fBclnt_broadcast\fP() に渡される \fIout\fP
113 と同じであるが、リモート・プロシジャからの出力がデコードされている 点のみが異っている。 \fIaddr\fP
114 は結果を送って来たマシンのアドレスを指している。 \fBeachresult\fP() がゼロを返した場合、 \fBclnt_broadcast\fP()
115 はさらなる回答を待つ。そうでなければ適切な状態で終了する。
117 警告: ブロードキャスト・ソケットはデータリンク層の最大転送単位に 制限されている。イーサネットの場合、最大値は 1500 バイトである。
120 \fBenum clnt_stat clnt_call(CLIENT *\fP\fIclnt\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
121 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
122 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
123 \fB struct timeval \fP\fItout\fP\fB);\fP
126 このマクロはクライアント・ハンドル \fIclnt\fP に関連付けられた \fIprocnum\fP リモート・プロシジャを呼び出す。 クライアント・ハンドルは
127 \fBclnt_create\fP() のような
129 クライアント作成ルーティンによって得られる。 パタメータ \fIin\fP
130 はプロシジャの引き数のアドレスである。 \fIout\fP はプロシジャの返り値を格納するアドレスである。 \fIinproc\fP
131 はプロシジャのパラメーターをエンコードするのに使用される。 \fIoutproc\fP はプロシジャの返り値をデコードするのに使用される。 \fItout\fP
135 \fBclnt_destroy(CLIENT *\fP\fIclnt\fP\fB);\fP
138 このマクロはクライアントの RPC ハンドルを破壊する。破壊には通常は \fIclnt\fP 自身も含めて私的なデータ構造体の破棄が含まれている。
139 \fBclnt_destroy\fP() の呼び出しの後に \fIclnt\fP を使用することは未定義である。 RPC
140 ライブラリが関連するソケットをオープンした場合には、 それも閉じられる。それ以外の場合にはソケットはオープンされたままである。
143 \fBCLIENT *clnt_create(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprog\fP\fB,\fP
144 \fB unsigned long \fP\fIvers\fP\fB, char *\fP\fIproto\fP\fB);\fP
147 一般的なクライアントの作成ルーティンである。 \fIhost\fP はサーバのあるリモートホストの名前を指定する。 \fIproto\fP
148 どのような通信プロトコルを使用するかを指定する。現在ここに 使用できる値は \(lqudp\(rq と \(lqtcp\(rq である。
149 デフォルトの時間切れが設定されるが、 \fBclnt_control\fP() を使用して変更可能である。
151 警告: UDP を使用した場合には欠点がある。 UDP に基づいた RPC メッセージは 最大でも 8 KByte のエンコードデータしか保持する
152 ことができないため、大きな引き数や巨大な結果を取るプロシジャに は使用することができない。
155 \fBbool_t clnt_control(CLIENT *\fP\fIcl\fP\fB, int \fP\fIreq\fP\fB, char *\fP\fIinfo\fP\fB);\fP
158 このマクロは各種クライアントについて情報を変更したり、取得したり するのに使用する。 \fIreq\fP は操作の種類を指定する。 \fIinfo\fP
159 は情報へのポインターである。 UDP と TCP どちらの場合も使用可能な \fIreq\fP の値と、その引き数の型、およびその内容は以下の通りである:
163 \fBCLSET_TIMEOUT\fP \fIstruct timeval\fP // 時間切れを設定する
164 \fBCLGET_TIMEOUT\fP \fIstruct timeval\fP // 時間切れを取得する
168 注意: \fBclnt_control\fP() を使用して時間切れを設定した場合にはそれ以後は \fBclnt_call\fP()
169 に渡される時間切れパラメーターは全て無視される。
173 \fBCLGET_SERVER_ADDR\fP \fIstruct sockaddr_in \fP // サーバアドレスを取得する
177 以下の操作は UDP の場合にのみ有効である:
181 \fBCLSET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // 再送間隔を設定する
182 \fBCLGET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // 再送間隔を取得する
186 再送間隔は次に要求を再送する前に "UDP RPC" がサーバの回答を待つ時間である。
189 \fBclnt_freeres(CLIENT * \fP\fIclnt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
192 このマクロは RPC 呼び出しの結果のデコードの際に RPC/XDR システムによって割当てられたデータを解放する。 パラメーター \fIout\fP
193 は結果のアドレスである。 \fIoutproc\fP は結果を記述している XDR ルーティンである。 このルーティンは結果の解放に成功した場合には 1
197 \fBvoid clnt_geterr(CLIENT *\fP\fIclnt\fP\fB, struct rpc_err *\fP\fIerrp\fP\fB);\fP
200 このマクロはクライアント・ハンドルのエラー構造体を \fIerrp\fP アドレスで指定された構造体へコピーする。
203 \fBvoid clnt_pcreateerror(char *\fP\fIs\fP\fB);\fP
206 標準エラー出力に、なぜクライアント RPC ハンドルの作成が できなかったかについてのメッセージを表示する。 メッセージの前に文字列 \fIs\fP
207 とコロン(:)が表示される。 \fBclnt_create\fP(), \fBclntraw_create\fP(), \fBclnttcp_create\fP(),
208 \fBclntudp_create\fP() の呼び出しが失敗した時に使用すること。
211 \fBvoid clnt_perrno(enum clnt_stat \fP\fIstat\fP\fB);\fP
214 標準エラー出力に \fIstat\fP によって指示されるエラー状態に対応するメッセージを表示する。 \fBcallrpc\fP() の後に使用すること。
217 \fBclnt_perror(CLIENT *\fP\fIclnt\fP\fB, char *\fP\fIs\fP\fB);\fP
220 標準エラー出力に、なぜ RPC 呼び出しが失敗したかについてのメッセージを表示する。 \fIclnt\fP はコールに使用したハンドルである。
221 メッセージの前に文字列 \fIs\fP とコロン(:)が表示される。 \fBclnt_call\fP() が失敗した後に使用すること。
224 \fBchar *clnt_spcreateerror(char *\fP\fIs\fP\fB);\fP
227 \fBclnt_pcreateerror\fP() と同様であるが、標準エラー出力へ表示するかわりに文字列を返す点が異っている。
229 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
232 \fBchar *clnt_sperrno(enum clnt_stat \fP\fIstat\fP\fB);\fP
235 \fBclnt_perrno\fP() と同じ引き数を取るが、なぜ RPC 呼び出しが失敗したかについてのメッセージを標準エラー出力に表示する
236 かわりに、メッセージを格納している文字列へのポインターを返す。 文字列は NEWLINE(改行) で終っている。
238 \fBclnt_sperrno\fP() はプログラムが標準エラー出力を持っていない場合(プログラムがサーバとし
239 て走っている場合にはよくありえる)や、プログラマーがメッセージを \fBprintf\fP(3) で出力することを望まない場合や、メッセージの形式が
240 \fBclnt_perrno\fP() がサポートするものとは異っている場合などに \fBclnt_perrno\fP() のかわりに使用される。 注意:
241 \fBclnt_sperror\fP() や \fBclnt_spcreaterror\fP() とは違って \fBclnt_sperrno\fP()
242 は静的データへのポインターを返す。しかし呼び出しごとに上書きされることはない。
245 \fBchar *clnt_sperror(CLIENT *\fP\fIrpch\fP\fB, char *\fP\fIs\fP\fB);\fP
248 \fBclnt_perror\fP() と同様であるが、標準エラー出力に表示する代りに (\fBclnt_sperrno\fP() のように)
249 文字列へのポインターを返す点が異っている。
251 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
254 \fBCLIENT *clntraw_create(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
257 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための擬似 RPC
258 クライアントを作成する。メッセージをサービスに渡すために使用する 通信は実際にはそのプロセスのアドレス空間にあるバッファーである。 それで、対応する
259 RPC サーバが同じアドレス空間の中にいなければならない。 \fBsvcraw_create\fP() を参照すること。 これにより RPC
260 のシミュレーションや、カーネル・インターフェースに影響されずに 応答時間などの RPC オーバヘッドの獲得ができる。 失敗した場合にはこのルーティンは
264 \fBCLIENT *clnttcp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
265 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
266 \fB int *\fP\fIsockp\fP\fB, unsigned int \fP\fIsendsz\fP\fB, unsigned int \fP\fIrecvsz\fP\fB);\fP
269 .\"The following inline font conversion is necessary for the hyphen indicator
270 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
271 クライアントを作成する。クライアントは通信に TCP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
272 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
273 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
274 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
275 に設定する。 TCP に基づいた RPC はバッファされた I/O を使用するため、ユーザはパラメーター \fIsendsz\fP と \fIrecvsz\fP
276 を使用して送信バッファと受信バッファのサイズを指定することができる。 ゼロを指定した場合には適切なデフォルトが選択される。
277 このルーティンは失敗した場合は NULL を返す。
280 \fBCLIENT *clntudp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
281 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
282 \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB);\fP
285 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
286 クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
287 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
288 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
289 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
290 に設定する。 UDP 通信は回答があるか、時間切れが起こるまで \fBwait\fP 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
291 \fBclnt_call\fP() で指定する。
293 警告: UDP に基づいた RPC メッセージは最大でも 8 Kbyte までのエンコードされたデータしか
294 保持できないため、この通信は大きな引き数や巨大な結果を取る プロシジャには使用できない。
297 \fBCLIENT *clntudp_bufcreate(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
298 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
299 \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB,\fP
300 \fB unsigned int \fP\fIsendsize\fP\fB, unsigned int \fP\fIrecosize\fP\fB);\fP
303 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
304 クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
305 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
306 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
307 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
308 に設定する。 UDP 通信は回答があるか、時間切れが起こるまで \fBwait\fP 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
309 \fBclnt_call\fP() で指定する。
311 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。
314 \fBvoid get_myaddress(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
317 このマシンの IP アドレスを \fI*addr\fP に格納する。 \fI/etc/hosts\fP を扱うライブラリ・ルーティンは使用しない。ポート番号は常に
318 \fBhtons(PMAPPORT)\fP に設定される。
321 \fBstruct pmaplist *pmap_getmaps(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
324 \fBportmap\fP サービスのためのユーザインターフェースであり、 IP アドレス \fI*addr\fP にあるホストの現在の RPC
325 プログラムからポート番号へのマッピングの一覧を返す。 このルーティンが NULL を返す場合もある。 `\fBrpcinfo \-p\fP'
329 \fBunsigned short pmap_getport(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
330 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
331 \fB unsigned int \fP\fIprotocol\fP\fB);\fP
334 \fBportmap\fP サービスのためのユーザ・インターフェースで、 プログラム番号 \fIprognum\fP、 バージョン \fIversnum\fP、
335 関連付けられた通信プロトコル \fIprotocol\fP をサポートするサービスが待っているポート番号を返す。 \fIprotocol\fP の値はほとんどの場合
336 IPPROTO_UDP か IPPROTO_TCP である。 返り値ゼロはマッピングが存在しないか、 RPC システムがリモートの \fBportmap\fP
337 サービスの参照に失敗したことを意味する。後者の場合は大域変数 \fIrpc_createerr\fP が RPC 状態を保持している。
340 \fBenum clnt_stat pmap_rmtcall(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
341 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
342 \fB unsigned long \fP\fIprocnum\fP\fB,\fP
343 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
344 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
345 \fB struct timeval \fP\fItout\fP\fB, unsigned long *\fP\fIportp\fP\fB);\fP
348 \fBportmap\fP サービスのためのユーザ・インターフェースで、 IP アドレス \fI*addr\fP のホストの \fBportmap\fP を参照して、
349 RPC 呼び出しを生成し、そのホスト上のプロシジャを呼び出す。 パラメーター \fI*portp\fP
350 はプロシジャが成功した場合にはプログラムのポート番号に修正される。 他のパラメーターの定義については \fBcallrpc\fP() や
351 \fBclnt_call\fP() で説明してある。 このプロシジャは \(lqping\(rq のみに使用すべきである。
352 \fBclnt_broadcast\fP() も参照すること。
355 \fBbool_t pmap_set(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
356 \fB unsigned int \fP\fIprotocol\fP\fB, unsigned short \fP\fIport\fP\fB);\fP
359 \fBportmap\fP サービスのためのユーザ・インターフェースで、 [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP]
360 の組み合わせと \fIport\fP との間のマッピングを、そのマシン上の \fBportmap\fP サービスに登録する。 \fIprotocol\fP
361 はほとんどの場合 \fBIPPROTO_UDP\fP か \fBIPPROTO_TCP\fP のどちらかである。 このルーティンは成功した場合には 1
362 を返す。失敗した場合にはゼロを返す。 \fBsvc_register\fP() によって自動的に実行される。
365 \fBbool_t pmap_unset(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
368 \fBportmap\fP サービスのためのユーザ・インターフェースで、 [\fIprognum\fP,\fIversnum\fP,\fI*\fP] の組み合わせと
369 \fBports\fP の間のマッピングをそのマシン上の \fBportmap\fP サービスから削除する。このルーティンは成功した場合は 1 を返す。
373 \fBint registerrpc(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
374 \fB unsigned long \fP\fIprocnum\fP\fB, char *(*\fP\fIprocname\fP\fB)(char *),\fP
375 \fB xdrproc_t \fP\fIinproc\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB);\fP
378 RPC サービスパッケージを使用して \fIprocname\fP プロシジャを登録する。プログラム \fIprognum\fP、 バージョン
379 \fIversnum\fP、 プロシジャ \fIprocnum\fP への要求が届いた場合、 \fIprocname\fP
380 がパラメーターへのポインターを持って呼び出される。 \fIprogname\fP は静的な結果へのポインターを返す必要がある。 \fIinproc\fP
381 はパラメーターをデコードするために使用される。 \fIoutproc\fP は結果をエンコードするために使用される。
382 このルーティンは登録に成功した場合にはゼロを返す。 失敗した場合には \-1 を返す。
384 警告: この形式で登録されたリモート・プロシジャは UDP/IP 通信を使用する。制限に関しては \fBsvcudp_create\fP()
388 \fBstruct rpc_createerr \fP\fIrpc_createerr\fP\fB;\fP
391 成功しなかった RPC クライアント生成ルーティンによって設定される大域変数。 \fBclnt_pcreateerror\fP()
392 ルーティンが理由を表示するために使用する。
395 \fBvoid svc_destroy(SVCXPRT *\fP\fIxprt\fP\fB);\fP
398 このマクロは通信ハンドル \fIxprt\fP の RPC サービスを破壊する。破壊には通常、 \fIxprt\fP
399 を含めて、私的なデータ構造体の破棄が含まれている。 このルーティンを呼び出した後に \fIxprt\fP を使用することは未定義である。
402 \fBfd_set \fP\fIsvc_fdset\fP\fB;\fP
405 RPC サービス側のファイル・ディスクリプターのビットマスクを反映した大域変数。 \fBselect\fP(2)
406 システムコールのパラメーターのために利用できる。これは サービスの実装者が \fBsvc_run\fP()
407 を呼び出さなずに、独自の非同期イベント処理を用いる場合にのみ意味がある。 この変数は読み込み専用で (そのまま \fBselect\fP(2)
408 へ渡してはならない!)、 \fBsvc_getreqset\fP() 呼び出しや生成ルーティンの後に変更されているかもしれない。
411 \fBint \fP\fIsvc_fds\fP\fB;\fP
414 \fBsvc_fdset\fP に似ているが、32 ディスクリプターに制限されている。 このインターフェースは \fBsvc_fdset\fP
418 \fBsvc_freeargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP
421 このマクロはサービス・プロシジャが \fBsvc_getargs\fP() を使用して引き数をデコードした時に RPC/XDR
422 システムによって割り当てられたデータを解放する。 このルーティンは解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。
425 \fBsvc_getargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP
428 このマクロは RPC サービス通信ハンドル \fIxprt\fP に関連付けられた RPC 要求の引き数をデコードする。パラメーター \fIin\fP
429 は引き数の格納されたアドレスである。 \fIinproc\fP は引き数をデコードするための XDR ルーティンである。
430 このルーティンはデコードに成功した場合は 1 を返す。 失敗した場合はゼロを返す。
433 \fBstruct sockaddr_in *svc_getcaller(SVCXPRT *\fP\fIxprt\fP\fB);\fP
436 RPC サービス通信ハンドル \fIxprt\fP に関連付けられたプロシジャの呼び出し元のネットワーク・アドレスを 取得するための標準的な手段。
439 \fBvoid svc_getreqset(fd_set *\fP\fIrdfds\fP\fB);\fP
442 このルーティンはサービスの実装者が \fBsvc_run\fP() を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。 これは
443 \fBselect\fP(2) システムコールが RPC ソケットに RPC 要求が到着したと返した場合にのみ呼び出される。 \fIrdfds\fP
444 は結果の読み込みファイル・ディスクリプターのビットマスクである。 このルーティンは \fIrdfds\fP
445 の値に関連付けられた全てのソケットのサービスが行なわれた時に 返ってくる。
448 \fBvoid svc_getreq(int \fP\fIrdfds\fP\fB);\fP
451 \fBsvc_getreqset\fP() に似ているがディスクリプターの数が 32 に制限されている。 このインターフェースは
452 \fBsvc_getreqset\fP() によって置き換えられた。
455 \fBbool_t svc_register(SVCXPRT *\fP\fIxprt\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP
456 \fB unsigned long \fP\fIversnum\fP\fB,\fP
457 \fB void (*\fP\fIdispatch\fP\fB)(svc_req *, SVCXPRT *),\fP
458 \fB unsigned long \fP\fIprotocol\fP\fB);\fP
461 \fIprognum\fP と \fIversnum\fP をサービス配分プロシジャ \fIdispatch\fP で関連付ける。 \fIprotocol\fP
462 がゼロの場合、サービスは \fBportmap\fP サービスには登録されない。 \fIprotocol\fP がゼロ以外の場合、
463 [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP] の組み合わせと \fIxprt\->xp_port\fP
464 とのマッピングがローカルの \fBportmap\fP サービスに登録される。(一般的に \fIprotocol\fP はゼロ、 \fBIPPROTO_UDP\fP、
465 \fBIPPROTO_TCP\fP のどれかである。) プロシジャ \fIdispatch\fP は以下の形式である:
469 dispatch(struct svc_req *request, SVCXPRT *xprt);
473 \fBsvc_register\fP() ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
476 \fBvoid svc_run(void);\fP
481 要求の到着を待ち、どれかが届いた場合に \fBsvc_getreq\fP()
482 を使用して適切なサービス・プロシジャを呼び出す。 このプロシジャは通常は \fBselect\fP(2) システムコールから返るのを待っている。
485 \fBbool_t svc_sendreply(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
488 RPC サービス配分ルーティンによってリモート・プロシジャ・コールの結果を 返すために呼び出される。 パラメーター \fIxprt\fP
489 はその要求に関連付けられた通信ハンドルである。 \fIoutproc\fP は結果をエンコードするために使用する XDR ルーティンである。 \fIout\fP
490 は結果のアドレスである。このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
493 \fBvoid svc_unregister(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
496 配分ルーティンから [\fIprognum\fP,\fIversnum\fP] および [\fIprognum\fP,\fIversnum\fP,\fI*\fP]
497 の組み合わせからポート番号へのマッピングを全て削除する。
500 \fBvoid svcerr_auth(SVCXPRT *\fP\fIxprt\fP\fB, enum auth_stat \fP\fIwhy\fP\fB);\fP
503 認証エラーによりリモート・プロシジャ・コールの実行を拒否された 場合にサービス配分ルーティンによって呼び出される。
506 \fBvoid svcerr_decode(SVCXPRT *\fP\fIxprt\fP\fB);\fP
509 パラメータのデコードに失敗した場合に サービス配分ルーティンによって呼び出される。 \fBsvc_getargs\fP() も参照すること。
512 \fBvoid svcerr_noproc(SVCXPRT *\fP\fIxprt\fP\fB);\fP
515 要求のあったプロシジャ番号が実装されていない場合に サービス配分ルーティンより呼び出される。
518 \fBvoid svcerr_noprog(SVCXPRT *\fP\fIxprt\fP\fB);\fP
521 RPC パッケージに要求されたプログラムが登録されていない場合に呼び出される。 サービスの実装には通常、このルーティンは必要ない。
524 \fBvoid svcerr_progvers(SVCXPRT *\fP\fIxprt\fP\fB);\fP
527 RPC パッケージに要求されたバージョンのプログラムが登録されていない場合に 呼び出される。サービスの実装には通常、このルーティンは必要ない。
530 \fBvoid svcerr_systemerr(SVCXPRT *\fP\fIxprt\fP\fB);\fP
533 特定のプロトコルによってカバーされていなシステム・エラーが 検出された場合にサービス配分ルーティンによって呼び出される。
534 例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には このルーティンが呼び出されるかもしれない。
537 \fBvoid svcerr_weakauth(SVCXPRT *\fP\fIxprt\fP\fB);\fP
540 認証パラメータが足りないためにリモート・プロシジャ・コールの実行を 拒否された場合にサービス配分ルーティンによって呼び出される。 このルーティンは
541 \fBsvcerr_auth(xprt, AUTH_TOOWEAK)\fP を呼び出す。
544 \fBSVCXPRT *svcfd_create(int \fP\fIfd\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
545 \fB unsigned int \fP\fIrecvsize\fP\fB);\fP
548 任意のオープンされたディスクリプター上にサービスを作成する。 典型的に、ディスクリプターは TCP
549 のようなストリーム・プロトコルで接続されたソケットである。 \fIsendsize\fP と \fIrecvsize\fP
550 には送信バッファと受信バッファの大きさを指定する。もしゼロが指定された 場合は適切なデフォルトが選択される。
553 \fBSVCXPRT *svcraw_create(void);\fP
556 このルーティンは擬似 RPC サービス通信を生成して、そのポインターを返す。 通信は実際にはそのプロセスのアドレス空間にあるバッファなので 対応する
557 RPC クライアントは同じアドレス空間にいる必要がある。 \fBclntraw_create\fP() を参照すること。 このルーティンで RPC
558 のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの RPC オーバヘッドを取得ができる。このルーティンは失敗した場合は
562 \fBSVCXPRT *svctcp_create(int \fP\fIsock\fP\fB, unsigned int \fP\fIsend_buf_size\fP\fB,\fP
563 \fB unsigned int \fP\fIrecv_buf_size\fP\fB);\fP
566 このルーティンは TCP/IP に基づく RPC サービス通信を作成し、それへのポインターを返す。 通信はソケット \fIsock\fP に結びつけられる。
567 \fIsock\fP は \fBRPC_ANYSOCK\fP でも良い。この場合は新しいソケットが作成される。 もしソケットがローカルな TCP ポートに bind
568 されていない場合は、 このルーティンが適当なポートに bind する。 補完された場合、\fIxprt\->xp_sock\fP には通信のソケット・
569 ディスクリプターが、\fIxprt\->xp_port\fP には通信のポート番号が 設定される。 このルーティンは失敗した場合は NULL を返す。
570 TCP に基づいた RPC はバッファされた I/O を使用するため、 ユーザはバッファの大きさを指定できる。
571 ゼロを指定した場合は適切なデフォルトが選択される。
574 \fBSVCXPRT *svcudp_bufcreate(int \fP\fIsock\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
575 \fB unsigned int \fP\fIrecosize\fP\fB);\fP
578 このルーティンは UDP/IP に基づいた RPC サービス通信を作成し、 そのポインターを返す。通信はソケット \fIsock\fP に関連付けられる。
579 \fIsock\fP は \fBRPC_ANYSOCK\fP でも良い。この場合は新しいソケットが作成される。 ソケットがローカルの UDP ポートに bind
580 されていない場合には このルーティンは適当なポートに bind する。 補完された場合、\fIxprt\->xp_sock\fP に通信のソケットの
581 ディスクリプターが、\fIxprt\->xp_port\fP に通信のポート番号が 設定される。このルーティンは失敗した場合には NULL を返す。
583 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。
586 \fBSVCXPRT *svcudp_create(int \fP\fIsock\fP\fB);\fP
589 送信パケットと受信パケットのサイズを同じデフォルトの値 \fISZ\fP に指定した \fIsvcudp_bufcreate(sock,SZ,SZ)\fP
593 \fBbool_t xdr_accepted_reply(XDR *\fP\fIxdrs\fP\fB, struct accepted_reply *\fP\fIar\fP\fB);\fP
596 RPC 応答メッセージをエンコードするのに使用する。このルーティンは RPC パッケージを用いずに
597 RPC\-形式のメッセージを作成しようとする場合に便利である。
600 \fBbool_t xdr_authunix_parms(XDR *\fP\fIxdrs\fP\fB, struct authunix_parms *\fP\fIaupp\fP\fB);\fP
603 UNIX 形式の証明書を記述するために使用する。このルーティンは RPC 認証パッケージを使用せずにこれらの証明書を作成しようとする場合に便利である。
606 \fBvoid xdr_callhdr(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIchdr\fP\fB);\fP
609 RPC 呼び出しのヘッダー・メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに
610 RPC\-形式のメッセージを作成しようとする場合に便利である。
613 \fBbool_t xdr_callmsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIcmsg\fP\fB);\fP
616 RPC 呼び出しメッセージを記述するのに使用する。 このルーティンは RPC パッケージを使用せずに
617 RPC\-形式のメッセージを作成しようとする場合に便利である。
620 \fBbool_t xdr_opaque_auth(XDR *\fP\fIxdrs\fP\fB, struct opaque_auth *\fP\fIap\fP\fB);\fP
623 PRC 認証情報メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに
624 RPC\-形式のメッセージを作成しようとする場合に便利である。
627 \fBbool_t xdr_pmap(XDR *\fP\fIxdrs\fP\fB, struct pmap *\fP\fIregs\fP\fB);\fP
630 各種の \fBportmap\fP プロシジャへのパラメーターを外部的に記述するために使用する。 このルーティンは \fBpmap\fP
631 インターフェースを使用せずに、これらのパラメーターを 作成したい場合に便利である。
634 \fBbool_t xdr_pmaplist(XDR *\fP\fIxdrs\fP\fB, struct pmaplist **\fP\fIrp\fP\fB);\fP
637 ポートのマッピングのリストを外部的に記述するために使用する。 このルーティンは \fBpmap\fP インターフェースを使用せずに、これらのパラメーターを
641 \fBbool_t xdr_rejected_reply(XDR *\fP\fIxdrs\fP\fB, struct rejected_reply *\fP\fIrr\fP\fB);\fP
644 RPC 応答メッセージを記述するために使用する。このルーティンは RPC パッケージを使用せずに、
645 RPC\-形式のメッセージを作成したい場合に便利である。
648 \fBbool_t xdr_replymsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIrmsg\fP\fB);\fP
651 RPC 応答メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに、 RPC
652 形式のメッセージを作成したい場合に便利である。
655 \fBvoid xprt_register(SVCXPRT *\fP\fIxprt\fP\fB);\fP
658 RPC サービス通信ハンドルを生成した後に、それら自身を RPC サービス・パッケージに登録する必要がある。 このルーティンは大域変数
659 \fIsvc_fds\fP を修正する。サービスの実装者は通常、このルーティンは必要ない。
662 \fBvoid xprt_unregister(SVCXPRT *\fP\fIxprt\fP\fB);\fP
665 RPC サービス通信ハンドルを破壊する前に、それを RPC 通信パッケージから登録解除する必要がある。 このルーティンは大域変数 \fIsvc_fds\fP
666 を修正する。サービスの実装者は通常、このルーティンは必要ない。
668 .\" We don't have an rpc_secure.3 page in the set at the moment -- MTK, 19 Sep 05
669 .\" .BR rpc_secure (3),
674 Remote Procedure Calls: Protocol Specification
676 Remote Procedure Call Programming Guide
678 rpcgen Programming Guide
682 \fIRPC: Remote Procedure Call Protocol Specification\fP, RFC\ 1050, Sun
683 Microsystems, Inc., USC\-ISI.
685 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
686 である。プロジェクトの説明とバグ報告に関する情報は
687 http://www.kernel.org/doc/man\-pages/ に書かれている。