1 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
3 .\" @(#)rpc.3n 2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI
5 .\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
7 .\"*******************************************************************
9 .\" This file was generated with po4a. Translate the source file.
11 .\"*******************************************************************
12 .TH RPC 3 2008\-07\-17 "" "Linux Programmer's Manual"
14 rpc \- 遠隔手続き呼び出し(RPC)のためのライブラリ・ルーティン
17 .\" We don't have an rpc_secure.3 page at the moment -- MTK, 19 Sep 05
18 .\" Routines that are used for Secure RPC (DES authentication) are described in
19 .\" .BR rpc_secure (3).
20 .\" Secure RPC can be used only if DES encryption is available.
21 これらのルーティンは C プログラムでネットワークを通して 他のマシンにアクセスするプロシジャを作成することを可能にする。
22 最初にクライアントはデータパケットをサーバに送るために プロシジャを呼び出す。 サーバはパケットを受け取ると、配分ルーチンを呼び出して
23 要求されたサービスに実行し、返答を送り返す。 最後にプロシジャ・コールはクライアントへと戻る。
25 これらのルーティンを使用するには、ヘッダファイル \fI<rpc/rpc.h>\fP をインクルードすること。
27 下記のプロトタイプでは次の型を使用している。
31 typedef int \fIbool_t\fP;
33 typedef bool_t (*\fIxdrproc_t\fP) (XDR *, void *,...);
35 typedef bool_t (*\fIresultproc_t\fP) (caddr_t resp,
36 struct sockaddr_in *raddr);
40 型 \fIAUTH\fP, \fICLIENT\fP, \fISVCXPRT\fP, \fIXDR\fP の宣言についてはヘッダファイルを参照。
43 \fBvoid auth_destroy(AUTH *\fP\fIauth\fP\fB);\fP
46 このマクロは \fIauth\fP に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の 破棄を含んでいる。 \fBauth_destroy\fP()
47 を呼び出した後に \fIauth\fP を使用することは未定義である。
50 \fBAUTH *authnone_create(void);\fP
53 各リモート・プロシジャ・コールで使用できない仮の認証情報として渡される RPC 認証ハンドルを作成して返す。 これは RPC
57 \fBAUTH *authunix_create(char *\fP\fIhost\fP\fB, int \fP\fIuid\fP\fB, int \fP\fIgid\fP\fB,\fP
58 \fB int \fP\fIlen\fP\fB, int *\fP\fIaup_gids\fP\fB);\fP
61 認証情報を含んだ RPC 認証ハンドルを作成して返す。 \fIhost\fP パラメーターは情報が作成されたマシンの名前である。 \fIuid\fP
64 、 \fIgid\fP はそのユーザの現在のグループ
67 \fIaup_gids\fP はそのユーザが所属するグループの配列を参照している。 他のユーザになりすますことは簡単である。
70 \fBAUTH *authunix_create_default(void);\fP
73 適切なパラメーターで \fBauthunix_create\fP() を呼び出す。
76 \fBint callrpc(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP
77 \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
78 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
79 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
82 マシン \fIhost\fP 上で \fIprognum\fP, \fIversnum\fP, \fIprocnum\fP に関連付けられたリモート・プロシジャを呼び出す。
83 パラメーター \fIin\fP はプロシジャの引き数のアドレスであり \fIout\fP は結果を格納するアドレスである。 \fIinproc\fP
84 はプロシジャのパラメーターをエンコードするのに使用され、 \fIoutproc\fP は結果をデコードするのに使用される。
85 このルーティンは成功した場合にはゼロを返す。失敗した場合には \fBenum clnt_stat\fP を整数にキャストした値を返す。
86 \fBclnt_perrno\fP() ルーティンが失敗の状態をメッセージに変換するのに使用できる。
88 警告: このルーティンでリモート・プロシジャを呼び出すと通信には UDP/IP が使用される。この際の制限については
89 \fBclntudp_create\fP() を参照すること。このルーティンを使用して認証や時間切れの制御を することはできない。
92 \fBenum clnt_stat clnt_broadcast(unsigned long \fP\fIprognum\fP\fB,\fP
93 \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
94 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
95 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
96 \fB resultproc_t \fP\fIeachresult\fP\fB);\fP
99 \fBcallrpc\fP() と同様であるが、メッセージがローカルのブロードキャスト・ネットワーク
100 全体へとブロードキャストされる点が異っている。回答を受け取る度に このルーティンは以下の形式の \fBeachresult\fP() を呼び出す。
104 \fBeachresult(char *\fP\fIout\fP\fB, struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
108 ここで \fIout\fP は \fBclnt_broadcast\fP() に渡される \fIout\fP
109 と同じであるが、リモート・プロシジャからの出力がデコードされている 点のみが異っている。 \fIaddr\fP
110 は結果を送って来たマシンのアドレスを指している。 \fBeachresult\fP() がゼロを返した場合、 \fBclnt_broadcast\fP()
111 はさらなる回答を待つ。そうでなければ適切な状態で終了する。
113 警告: ブロードキャスト・ソケットはデータリンク層の最大転送単位に 制限されている。イーサネットの場合、最大値は 1500 バイトである。
116 \fBenum clnt_stat clnt_call(CLIENT *\fP\fIclnt\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP
117 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
118 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
119 \fB struct timeval \fP\fItout\fP\fB);\fP
122 このマクロはクライアント・ハンドル \fIclnt\fP に関連付けられた \fIprocnum\fP リモート・プロシジャを呼び出す。 クライアント・ハンドルは
123 \fBclnt_create\fP() のような
125 クライアント作成ルーティンによって得られる。 パタメータ \fIin\fP
126 はプロシジャの引き数のアドレスである。 \fIout\fP はプロシジャの返り値を格納するアドレスである。 \fIinproc\fP
127 はプロシジャのパラメーターをエンコードするのに使用される。 \fIoutproc\fP はプロシジャの返り値をデコードするのに使用される。 \fItout\fP
131 \fBclnt_destroy(CLIENT *\fP\fIclnt\fP\fB);\fP
134 このマクロはクライアントの RPC ハンドルを破壊する。破壊には通常は \fIclnt\fP 自身も含めて私的なデータ構造体の破棄が含まれている。
135 \fBclnt_destroy\fP() の呼び出しの後に \fIclnt\fP を使用することは未定義である。 RPC
136 ライブラリが関連するソケットをオープンした場合には、 それも閉じられる。それ以外の場合にはソケットはオープンされたままである。
139 \fBCLIENT *clnt_create(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprog\fP\fB,\fP
140 \fB unsigned long \fP\fIvers\fP\fB, char *\fP\fIproto\fP\fB);\fP
143 一般的なクライアントの作成ルーティンである。 \fIhost\fP はサーバのあるリモートホストの名前を指定する。 \fIproto\fP
144 どのような通信プロトコルを使用するかを指定する。現在ここに 使用できる値は \(lqudp\(rq と \(lqtcp\(rq である。
145 デフォルトの時間切れが設定されるが、 \fBclnt_control\fP() を使用して変更可能である。
147 警告: UDP を使用した場合には欠点がある。 UDP に基づいた RPC メッセージは 最大でも 8 KByte のエンコードデータしか保持する
148 ことができないため、大きな引き数や巨大な結果を取るプロシジャに は使用することができない。
151 \fBbool_t clnt_control(CLIENT *\fP\fIcl\fP\fB, int \fP\fIreq\fP\fB, char *\fP\fIinfo\fP\fB);\fP
154 このマクロは各種クライアントについて情報を変更したり、取得したり するのに使用する。 \fIreq\fP は操作の種類を指定する。 \fIinfo\fP
155 は情報へのポインターである。 UDP と TCP どちらの場合も使用可能な \fIreq\fP の値と、その引き数の型、およびその内容は以下の通りである:
159 \fBCLSET_TIMEOUT\fP \fIstruct timeval\fP // 時間切れを設定する
160 \fBCLGET_TIMEOUT\fP \fIstruct timeval\fP // 時間切れを取得する
164 注意: \fBclnt_control\fP() を使用して時間切れを設定した場合にはそれ以後は \fBclnt_call\fP()
165 に渡される時間切れパラメーターは全て無視される。
169 \fBCLGET_SERVER_ADDR\fP \fIstruct sockaddr_in \fP // サーバアドレスを取得する
173 以下の操作は UDP の場合にのみ有効である:
177 \fBCLSET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // 再送間隔を設定する
178 \fBCLGET_RETRY_TIMEOUT\fP \fIstruct timeval\fP // 再送間隔を取得する
182 再送間隔は次に要求を再送する前に "UDP RPC" がサーバの回答を待つ時間である。
185 \fBclnt_freeres(CLIENT * \fP\fIclnt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
188 このマクロは RPC 呼び出しの結果のデコードの際に RPC/XDR システムによって割当てられたデータを解放する。 パラメーター \fIout\fP
189 は結果のアドレスである。 \fIoutproc\fP は結果を記述している XDR ルーティンである。 このルーティンは結果の解放に成功した場合には 1
193 \fBvoid clnt_geterr(CLIENT *\fP\fIclnt\fP\fB, struct rpc_err *\fP\fIerrp\fP\fB);\fP
196 このマクロはクライアント・ハンドルのエラー構造体を \fIerrp\fP アドレスで指定された構造体へコピーする。
199 \fBvoid clnt_pcreateerror(char *\fP\fIs\fP\fB);\fP
202 標準エラー出力に、なぜクライアント RPC ハンドルの作成が できなかったかについてのメッセージを表示する。 メッセージの前に文字列 \fIs\fP
203 とコロン(:)が表示される。 \fBclnt_create\fP(), \fBclntraw_create\fP(), \fBclnttcp_create\fP(),
204 \fBclntudp_create\fP() の呼び出しが失敗した時に使用すること。
207 \fBvoid clnt_perrno(enum clnt_stat \fP\fIstat\fP\fB);\fP
210 標準エラー出力に \fIstat\fP によって指示されるエラー状態に対応するメッセージを表示する。 \fBcallrpc\fP() の後に使用すること。
213 \fBclnt_perror(CLIENT *\fP\fIclnt\fP\fB, char *\fP\fIs\fP\fB);\fP
216 標準エラー出力に、なぜ RPC 呼び出しが失敗したかについてのメッセージを表示する。 \fIclnt\fP はコールに使用したハンドルである。
217 メッセージの前に文字列 \fIs\fP とコロン(:)が表示される。 \fBclnt_call\fP() が失敗した後に使用すること。
220 \fBchar *clnt_spcreateerror(char *\fP\fIs\fP\fB);\fP
223 \fBclnt_pcreateerror\fP() と同様であるが、標準エラー出力へ表示するかわりに文字列を返す点が異っている。
225 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
228 \fBchar *clnt_sperrno(enum clnt_stat \fP\fIstat\fP\fB);\fP
231 \fBclnt_perrno\fP() と同じ引き数を取るが、なぜ RPC 呼び出しが失敗したかについてのメッセージを標準エラー出力に表示する
232 かわりに、メッセージを格納している文字列へのポインターを返す。 文字列は NEWLINE(改行) で終っている。
234 \fBclnt_sperrno\fP() はプログラムが標準エラー出力を持っていない場合(プログラムがサーバとし
235 て走っている場合にはよくありえる)や、プログラマーがメッセージを \fBprintf\fP(3) で出力することを望まない場合や、メッセージの形式が
236 \fBclnt_perrno\fP() がサポートするものとは異っている場合などに \fBclnt_perrno\fP() のかわりに使用される。 注意:
237 \fBclnt_sperror\fP() や \fBclnt_spcreaterror\fP() とは違って \fBclnt_sperrno\fP()
238 は静的データへのポインターを返す。しかし呼び出しごとに上書きされることはない。
241 \fBchar *clnt_sperror(CLIENT *\fP\fIrpch\fP\fB, char *\fP\fIs\fP\fB);\fP
244 \fBclnt_perror\fP() と同様であるが、標準エラー出力に表示する代りに (\fBclnt_sperrno\fP() のように)
245 文字列へのポインターを返す点が異っている。
247 バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
250 \fBCLIENT *clntraw_create(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
253 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための擬似 RPC
254 クライアントを作成する。メッセージをサービスに渡すために使用する 通信は実際にはそのプロセスのアドレス空間にあるバッファーである。 それで、対応する
255 RPC サーバが同じアドレス空間の中にいなければならない。 \fBsvcraw_create\fP() を参照すること。 これにより RPC
256 のシミュレーションや、カーネル・インターフェースに影響されずに 応答時間などの RPC オーバヘッドの獲得ができる。 失敗した場合にはこのルーティンは
260 \fBCLIENT *clnttcp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
261 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
262 \fB int *\fP\fIsockp\fP\fB, unsigned int \fP\fIsendsz\fP\fB, unsigned int \fP\fIrecvsz\fP\fB);\fP
265 .\"The following inline font conversion is necessary for the hyphen indicator
266 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
267 クライアントを作成する。クライアントは通信に TCP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
268 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
269 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
270 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
271 に設定する。 TCP に基づいた RPC はバッファされた I/O を使用するため、ユーザはパラメーター \fIsendsz\fP と \fIrecvsz\fP
272 を使用して送信バッファと受信バッファのサイズを指定することができる。 ゼロを指定した場合には適切なデフォルトが選択される。
273 このルーティンは失敗した場合は NULL を返す。
276 \fBCLIENT *clntudp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
277 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
278 \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB);\fP
281 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
282 クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
283 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
284 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
285 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
286 に設定する。 UDP 通信は回答があるか、時間切れが起こるまで \fBwait\fP 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
287 \fBclnt_call\fP() で指定する。
289 警告: UDP に基づいた RPC メッセージは最大でも 8 Kbyte までのエンコードされたデータしか
290 保持できないため、この通信は大きな引き数や巨大な結果を取る プロシジャには使用できない。
293 \fBCLIENT *clntudp_bufcreate(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
294 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
295 \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB,\fP
296 \fB unsigned int \fP\fIsendsize\fP\fB, unsigned int \fP\fIrecosize\fP\fB);\fP
299 このルーティンはリモート・プログラム \fIprognum\fP、 バージョン \fIversnum\fP のための RPC
300 クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの \fI*addr\fP にある。
301 \fIaddr\->sin_port\fP がゼロならば、実際にリモート・プログラムが listen
302 しているポートが設定される。(この情報のためにリモートの \fBportmap\fP サービスが利用される。) パラメーター \fIsockp\fP
303 はソケットである。もしこれが \fBRPC_ANYSOCK\fP に設定されている場合は、このルーティンが新しいソケットをオープンして \fIsockp\fP
304 に設定する。 UDP 通信は回答があるか、時間切れが起こるまで \fBwait\fP 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は
305 \fBclnt_call\fP() で指定する。
307 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。
310 \fBvoid get_myaddress(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
313 このマシンの IP アドレスを \fI*addr\fP に格納する。 \fI/etc/hosts\fP を扱うライブラリ・ルーティンは使用しない。ポート番号は常に
314 \fBhtons(PMAPPORT)\fP に設定される。
317 \fBstruct pmaplist *pmap_getmaps(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP
320 \fBportmap\fP サービスのためのユーザインターフェースであり、 IP アドレス \fI*addr\fP にあるホストの現在の RPC
321 プログラムからポート番号へのマッピングの一覧を返す。 このルーティンが NULL を返す場合もある。 `\fBrpcinfo \-p\fP'
325 \fBunsigned short pmap_getport(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
326 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
327 \fB unsigned int \fP\fIprotocol\fP\fB);\fP
330 \fBportmap\fP サービスのためのユーザ・インターフェースで、 プログラム番号 \fIprognum\fP、 バージョン \fIversnum\fP、
331 関連付けられた通信プロトコル \fIprotocol\fP をサポートするサービスが待っているポート番号を返す。 \fIprotocol\fP の値はほとんどの場合
332 IPPROTO_UDP か IPPROTO_TCP である。 返り値ゼロはマッピングが存在しないか、 RPC システムがリモートの \fBportmap\fP
333 サービスの参照に失敗したことを意味する。後者の場合は大域変数 \fIrpc_createerr\fP が RPC 状態を保持している。
336 \fBenum clnt_stat pmap_rmtcall(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP
337 \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
338 \fB unsigned long \fP\fIprocnum\fP\fB,\fP
339 \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP
340 \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP
341 \fB struct timeval \fP\fItout\fP\fB, unsigned long *\fP\fIportp\fP\fB);\fP
344 \fBportmap\fP サービスのためのユーザ・インターフェースで、 IP アドレス \fI*addr\fP のホストの \fBportmap\fP を参照して、
345 RPC 呼び出しを生成し、そのホスト上のプロシジャを呼び出す。 パラメーター \fI*portp\fP
346 はプロシジャが成功した場合にはプログラムのポート番号に修正される。 他のパラメーターの定義については \fBcallrpc\fP() や
347 \fBclnt_call\fP() で説明してある。 このプロシジャは \(lqping\(rq のみに使用すべきである。
348 \fBclnt_broadcast\fP() も参照すること。
351 \fBbool_t pmap_set(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
352 \fB unsigned int \fP\fIprotocol\fP\fB, unsigned short \fP\fIport\fP\fB);\fP
355 \fBportmap\fP サービスのためのユーザ・インターフェースで、 [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP]
356 の組み合わせと \fIport\fP との間のマッピングを、そのマシン上の \fBportmap\fP サービスに登録する。 \fIprotocol\fP
357 はほとんどの場合 \fBIPPROTO_UDP\fP か \fBIPPROTO_TCP\fP のどちらかである。 このルーティンは成功した場合には 1
358 を返す。失敗した場合にはゼロを返す。 \fBsvc_register\fP() によって自動的に実行される。
361 \fBbool_t pmap_unset(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
364 \fBportmap\fP サービスのためのユーザ・インターフェースで、 [\fIprognum\fP,\fIversnum\fP,\fI*\fP] の組み合わせと
365 \fBports\fP の間のマッピングをそのマシン上の \fBportmap\fP サービスから削除する。このルーティンは成功した場合は 1 を返す。
369 \fBint registerrpc(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP
370 \fB unsigned long \fP\fIprocnum\fP\fB, char *(*\fP\fIprocname\fP\fB)(char *),\fP
371 \fB xdrproc_t \fP\fIinproc\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB);\fP
374 RPC サービスパッケージを使用して \fIprocname\fP プロシジャを登録する。プログラム \fIprognum\fP、 バージョン
375 \fIversnum\fP、 プロシジャ \fIprocnum\fP への要求が届いた場合、 \fIprocname\fP
376 がパラメーターへのポインターを持って呼び出される。 \fIprogname\fP は静的な結果へのポインターを返す必要がある。 \fIinproc\fP
377 はパラメーターをデコードするために使用される。 \fIoutproc\fP は結果をエンコードするために使用される。
378 このルーティンは登録に成功した場合にはゼロを返す。 失敗した場合には \-1 を返す。
380 警告: この形式で登録されたリモート・プロシジャは UDP/IP 通信を使用する。制限に関しては \fBsvcudp_create\fP()
384 \fBstruct rpc_createerr \fP\fIrpc_createerr\fP\fB;\fP
387 成功しなかった RPC クライアント生成ルーティンによって設定される大域変数。 \fBclnt_pcreateerror\fP()
388 ルーティンが理由を表示するために使用する。
391 \fBvoid svc_destroy(SVCXPRT *\fP\fIxprt\fP\fB);\fP
394 このマクロは通信ハンドル \fIxprt\fP の RPC サービスを破壊する。破壊には通常、 \fIxprt\fP
395 を含めて、私的なデータ構造体の破棄が含まれている。 このルーティンを呼び出した後に \fIxprt\fP を使用することは未定義である。
398 \fBfd_set \fP\fIsvc_fdset\fP\fB;\fP
401 RPC サービス側のファイル・ディスクリプターのビットマスクを反映した大域変数。 \fBselect\fP(2)
402 システムコールのパラメーターのために利用できる。これは サービスの実装者が \fBsvc_run\fP()
403 を呼び出さなずに、独自の非同期イベント処理を用いる場合にのみ意味がある。 この変数は読み込み専用で (そのまま \fBselect\fP(2)
404 へ渡してはならない!)、 \fBsvc_getreqset\fP() 呼び出しや生成ルーティンの後に変更されているかもしれない。
407 \fBint \fP\fIsvc_fds\fP\fB;\fP
410 \fBsvc_fdset\fP に似ているが、32 ディスクリプターに制限されている。 このインターフェースは \fBsvc_fdset\fP
414 \fBsvc_freeargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP
417 このマクロはサービス・プロシジャが \fBsvc_getargs\fP() を使用して引き数をデコードした時に RPC/XDR
418 システムによって割り当てられたデータを解放する。 このルーティンは解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。
421 \fBsvc_getargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP
424 このマクロは RPC サービス通信ハンドル \fIxprt\fP に関連付けられた RPC 要求の引き数をデコードする。パラメーター \fIin\fP
425 は引き数の格納されたアドレスである。 \fIinproc\fP は引き数をデコードするための XDR ルーティンである。
426 このルーティンはデコードに成功した場合は 1 を返す。 失敗した場合はゼロを返す。
429 \fBstruct sockaddr_in *svc_getcaller(SVCXPRT *\fP\fIxprt\fP\fB);\fP
432 RPC サービス通信ハンドル \fIxprt\fP に関連付けられたプロシジャの呼び出し元のネットワーク・アドレスを 取得するための標準的な手段。
435 \fBvoid svc_getreqset(fd_set *\fP\fIrdfds\fP\fB);\fP
438 このルーティンはサービスの実装者が \fBsvc_run\fP() を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。 これは
439 \fBselect\fP(2) システムコールが RPC ソケットに RPC 要求が到着したと返した場合にのみ呼び出される。 \fIrdfds\fP
440 は結果の読み込みファイル・ディスクリプターのビットマスクである。 このルーティンは \fIrdfds\fP
441 の値に関連付けられた全てのソケットのサービスが行なわれた時に 返ってくる。
444 \fBvoid svc_getreq(int \fP\fIrdfds\fP\fB);\fP
447 \fBsvc_getreqset\fP() に似ているがディスクリプターの数が 32 に制限されている。 このインターフェースは
448 \fBsvc_getreqset\fP() によって置き換えられた。
451 \fBbool_t svc_register(SVCXPRT *\fP\fIxprt\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP
452 \fB unsigned long \fP\fIversnum\fP\fB,\fP
453 \fB void (*\fP\fIdispatch\fP\fB)(svc_req *, SVCXPRT *),\fP
454 \fB unsigned long \fP\fIprotocol\fP\fB);\fP
457 \fIprognum\fP と \fIversnum\fP をサービス配分プロシジャ \fIdispatch\fP で関連付ける。 \fIprotocol\fP
458 がゼロの場合、サービスは \fBportmap\fP サービスには登録されない。 \fIprotocol\fP がゼロ以外の場合、
459 [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP] の組み合わせと \fIxprt\->xp_port\fP
460 とのマッピングがローカルの \fBportmap\fP サービスに登録される。(一般的に \fIprotocol\fP はゼロ、 \fBIPPROTO_UDP\fP、
461 \fBIPPROTO_TCP\fP のどれかである。) プロシジャ \fIdispatch\fP は以下の形式である:
465 dispatch(struct svc_req *request, SVCXPRT *xprt);
469 \fBsvc_register\fP() ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
472 \fBvoid svc_run(void);\fP
477 要求の到着を待ち、どれかが届いた場合に \fBsvc_getreq\fP()
478 を使用して適切なサービス・プロシジャを呼び出す。 このプロシジャは通常は \fBselect\fP(2) システムコールから返るのを待っている。
481 \fBbool_t svc_sendreply(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP
484 RPC サービス配分ルーティンによってリモート・プロシジャ・コールの結果を 返すために呼び出される。 パラメーター \fIxprt\fP
485 はその要求に関連付けられた通信ハンドルである。 \fIoutproc\fP は結果をエンコードするために使用する XDR ルーティンである。 \fIout\fP
486 は結果のアドレスである。このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
489 \fBvoid svc_unregister(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP
492 配分ルーティンから [\fIprognum\fP,\fIversnum\fP] および [\fIprognum\fP,\fIversnum\fP,\fI*\fP]
493 の組み合わせからポート番号へのマッピングを全て削除する。
496 \fBvoid svcerr_auth(SVCXPRT *\fP\fIxprt\fP\fB, enum auth_stat \fP\fIwhy\fP\fB);\fP
499 認証エラーによりリモート・プロシジャ・コールの実行を拒否された 場合にサービス配分ルーティンによって呼び出される。
502 \fBvoid svcerr_decode(SVCXPRT *\fP\fIxprt\fP\fB);\fP
505 パラメータのデコードに失敗した場合に サービス配分ルーティンによって呼び出される。 \fBsvc_getargs\fP() も参照すること。
508 \fBvoid svcerr_noproc(SVCXPRT *\fP\fIxprt\fP\fB);\fP
511 要求のあったプロシジャ番号が実装されていない場合に サービス配分ルーティンより呼び出される。
514 \fBvoid svcerr_noprog(SVCXPRT *\fP\fIxprt\fP\fB);\fP
517 RPC パッケージに要求されたプログラムが登録されていない場合に呼び出される。 サービスの実装には通常、このルーティンは必要ない。
520 \fBvoid svcerr_progvers(SVCXPRT *\fP\fIxprt\fP\fB);\fP
523 RPC パッケージに要求されたバージョンのプログラムが登録されていない場合に 呼び出される。サービスの実装には通常、このルーティンは必要ない。
526 \fBvoid svcerr_systemerr(SVCXPRT *\fP\fIxprt\fP\fB);\fP
529 特定のプロトコルによってカバーされていなシステム・エラーが 検出された場合にサービス配分ルーティンによって呼び出される。
530 例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には このルーティンが呼び出されるかもしれない。
533 \fBvoid svcerr_weakauth(SVCXPRT *\fP\fIxprt\fP\fB);\fP
536 認証パラメータが足りないためにリモート・プロシジャ・コールの実行を 拒否された場合にサービス配分ルーティンによって呼び出される。 このルーティンは
537 \fBsvcerr_auth(xprt, AUTH_TOOWEAK)\fP を呼び出す。
540 \fBSVCXPRT *svcfd_create(int \fP\fIfd\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
541 \fB unsigned int \fP\fIrecvsize\fP\fB);\fP
544 任意のオープンされたディスクリプター上にサービスを作成する。 典型的に、ディスクリプターは TCP
545 のようなストリーム・プロトコルで接続されたソケットである。 \fIsendsize\fP と \fIrecvsize\fP
546 には送信バッファと受信バッファの大きさを指定する。もしゼロが指定された 場合は適切なデフォルトが選択される。
549 \fBSVCXPRT *svcraw_create(void);\fP
552 このルーティンは擬似 RPC サービス通信を生成して、そのポインターを返す。 通信は実際にはそのプロセスのアドレス空間にあるバッファなので 対応する
553 RPC クライアントは同じアドレス空間にいる必要がある。 \fBclntraw_create\fP() を参照すること。 このルーティンで RPC
554 のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの RPC オーバヘッドを取得ができる。このルーティンは失敗した場合は
558 \fBSVCXPRT *svctcp_create(int \fP\fIsock\fP\fB, unsigned int \fP\fIsend_buf_size\fP\fB,\fP
559 \fB unsigned int \fP\fIrecv_buf_size\fP\fB);\fP
562 このルーティンは TCP/IP に基づく RPC サービス通信を作成し、それへのポインターを返す。 通信はソケット \fIsock\fP に結びつけられる。
563 \fIsock\fP は \fBRPC_ANYSOCK\fP でも良い。この場合は新しいソケットが作成される。 もしソケットがローカルな TCP ポートに bind
564 されていない場合は、 このルーティンが適当なポートに bind する。 補完された場合、\fIxprt\->xp_sock\fP には通信のソケット・
565 ディスクリプターが、\fIxprt\->xp_port\fP には通信のポート番号が 設定される。 このルーティンは失敗した場合は NULL を返す。
566 TCP に基づいた RPC はバッファされた I/O を使用するため、 ユーザはバッファの大きさを指定できる。
567 ゼロを指定した場合は適切なデフォルトが選択される。
570 \fBSVCXPRT *svcudp_bufcreate(int \fP\fIsock\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
571 \fB unsigned int \fP\fIrecosize\fP\fB);\fP
574 このルーティンは UDP/IP に基づいた RPC サービス通信を作成し、 そのポインターを返す。通信はソケット \fIsock\fP に関連付けられる。
575 \fIsock\fP は \fBRPC_ANYSOCK\fP でも良い。この場合は新しいソケットが作成される。 ソケットがローカルの UDP ポートに bind
576 されていない場合には このルーティンは適当なポートに bind する。 補完された場合、\fIxprt\->xp_sock\fP に通信のソケットの
577 ディスクリプターが、\fIxprt\->xp_port\fP に通信のポート番号が 設定される。このルーティンは失敗した場合には NULL を返す。
579 これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。
582 \fBSVCXPRT *svcudp_create(int \fP\fIsock\fP\fB);\fP
585 送信パケットと受信パケットのサイズを同じデフォルトの値 \fISZ\fP に指定した \fIsvcudp_bufcreate(sock,SZ,SZ)\fP
589 \fBbool_t xdr_accepted_reply(XDR *\fP\fIxdrs\fP\fB, struct accepted_reply *\fP\fIar\fP\fB);\fP
592 RPC 応答メッセージをエンコードするのに使用する。このルーティンは RPC パッケージを用いずに
593 RPC\-形式のメッセージを作成しようとする場合に便利である。
596 \fBbool_t xdr_authunix_parms(XDR *\fP\fIxdrs\fP\fB, struct authunix_parms *\fP\fIaupp\fP\fB);\fP
599 UNIX 形式の証明書を記述するために使用する。このルーティンは RPC 認証パッケージを使用せずにこれらの証明書を作成しようとする場合に便利である。
602 \fBvoid xdr_callhdr(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIchdr\fP\fB);\fP
605 RPC 呼び出しのヘッダー・メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに
606 RPC\-形式のメッセージを作成しようとする場合に便利である。
609 \fBbool_t xdr_callmsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIcmsg\fP\fB);\fP
612 RPC 呼び出しメッセージを記述するのに使用する。 このルーティンは RPC パッケージを使用せずに
613 RPC\-形式のメッセージを作成しようとする場合に便利である。
616 \fBbool_t xdr_opaque_auth(XDR *\fP\fIxdrs\fP\fB, struct opaque_auth *\fP\fIap\fP\fB);\fP
619 PRC 認証情報メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに
620 RPC\-形式のメッセージを作成しようとする場合に便利である。
623 \fBbool_t xdr_pmap(XDR *\fP\fIxdrs\fP\fB, struct pmap *\fP\fIregs\fP\fB);\fP
626 各種の \fBportmap\fP プロシジャへのパラメーターを外部的に記述するために使用する。 このルーティンは \fBpmap\fP
627 インターフェースを使用せずに、これらのパラメーターを 作成したい場合に便利である。
630 \fBbool_t xdr_pmaplist(XDR *\fP\fIxdrs\fP\fB, struct pmaplist **\fP\fIrp\fP\fB);\fP
633 ポートのマッピングのリストを外部的に記述するために使用する。 このルーティンは \fBpmap\fP インターフェースを使用せずに、これらのパラメーターを
637 \fBbool_t xdr_rejected_reply(XDR *\fP\fIxdrs\fP\fB, struct rejected_reply *\fP\fIrr\fP\fB);\fP
640 RPC 応答メッセージを記述するために使用する。このルーティンは RPC パッケージを使用せずに、
641 RPC\-形式のメッセージを作成したい場合に便利である。
644 \fBbool_t xdr_replymsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIrmsg\fP\fB);\fP
647 RPC 応答メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに、 RPC
648 形式のメッセージを作成したい場合に便利である。
651 \fBvoid xprt_register(SVCXPRT *\fP\fIxprt\fP\fB);\fP
654 RPC サービス通信ハンドルを生成した後に、それら自身を RPC サービス・パッケージに登録する必要がある。 このルーティンは大域変数
655 \fIsvc_fds\fP を修正する。サービスの実装者は通常、このルーティンは必要ない。
658 \fBvoid xprt_unregister(SVCXPRT *\fP\fIxprt\fP\fB);\fP
661 RPC サービス通信ハンドルを破壊する前に、それを RPC 通信パッケージから登録解除する必要がある。 このルーティンは大域変数 \fIsvc_fds\fP
662 を修正する。サービスの実装者は通常、このルーティンは必要ない。
664 .\" We don't have an rpc_secure.3 page in the set at the moment -- MTK, 19 Sep 05
665 .\" .BR rpc_secure (3),
670 Remote Procedure Calls: Protocol Specification
672 Remote Procedure Call Programming Guide
674 rpcgen Programming Guide
677 \fIRPC: Remote Procedure Call Protocol Specification\fP, RFC\ 1050, Sun
678 Microsystems, Inc., USC\-ISI.