EN JA
RPC_CLNT_CALLS(3)
RPC_CLNT_CALLS(3) FreeBSD Library Functions Manual RPC_CLNT_CALLS(3)

名称

rpc_clnt_calls, clnt_call, clnt_freeres, clnt_geterr, clnt_perrno, clnt_perror, clnt_sperrno, clnt_sperror, rpc_broadcast, rpc_broadcast_exp, rpc_callクライアント側呼び出しのためのライブラリルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < rpc/rpc.h>

enum clnt_stat
clnt_call( CLIENT *clnt, const rpcproc_t procnum, const xdrproc_t inproc, const caddr_t in, const xdrproc_t outproc, caddr_t out, const struct timeval tout);

bool_t
clnt_freeres( CLIENT *clnt, const xdrproc_t outproc, caddr_t out);

void
clnt_geterr( const CLIENT * clnt, struct rpc_err * errp);

void
clnt_perrno( const enum clnt_stat stat);

void
clnt_perror( CLIENT *clnt, const char *s);

char *
clnt_sperrno( const enum clnt_stat stat);

char *
clnt_sperror( CLIENT *clnt, const char * s);

enum clnt_stat
rpc_broadcast( const rpcprog_t prognum, const rpcvers_t versnum, const rpcproc_t procnum, const xdrproc_t inproc, const caddr_t in, const xdrproc_t outproc, caddr_t out, const resultproc_t eachresult, const char *nettype);

enum clnt_stat
rpc_broadcast_exp( const rpcprog_t prognum, const rpcvers_t versnum, const rpcproc_t procnum, const xdrproc_t xargs, caddr_t argsp, const xdrproc_t xresults, caddr_t resultsp, const resultproc_t eachresult, const int inittime, const int waittime, const char * nettype);

enum clnt_stat
rpc_call( const char *host, const rpcprog_t prognum, const rpcvers_t versnum, const rpcproc_t procnum, const xdrproc_t inproc, const char *in, const xdrproc_t outproc, char *out, const char *nettype);

解説

RPC ライブラリルーチンは、C 言語プログラムでネットワークの向こう側の他のマシンにプロシージャコールを行えるようにします。最初に、クライアントは、要求をサーバに送信するためにプロシージャを呼び出します。要求を受け付け次第、サーバは要求されたサービスを実行するためにディスパッチルーチンを呼び出し、次に、応答を返信します。

clnt_call(), rpc_call() と rpc_broadcast() ルーチンはプロシージャコールのクライアント側を操作します。残りのルーチンはエラーの場合にエラー操作を処理します。

いくつかのルーチンは引数の 1 つとして CLIENT ハンドルを取ります。 CLIENT ハンドルは clnt_create() などの RPC 作成ルーチンによって作成することができます ( rpc_clnt_create(3) 参照)。

これらのルーチンはマルチスレッド化されたアプリケーションで安全に使用されます。 CLIENT ハンドルは、スレッドの間で共有することができますが、しかしながら、この実装では、異なったスレッドによる要求はシリアライズされます (すなわち、2 番目の要求を送信する前に、最初の要求は結果を受信します)。

ルーチン

CLIENT データ構造体の定義に関しては rpc(3) を参照してください。
clnt_call()
clnt_create() ( rpc_clnt_create(3) 参照) のような RPC クライアント作成ルーチンで取得される、クライアントハンドル、 clnt に関連するリモートプロシージャ procnum を呼び出す関数マクロ。 inproc 引数はプロシージャの引数をエンコードするために使用される XDR 関数で、 outproc はプロシージャの結果をデコードするために使用される XDR 関数です。 in はプロシージャの引数のアドレスで、 out は複数の結果をどこに置くかのアドレスです。 tout 引数は、 clnt_control() を通して明確にタイムアウトを設定することによって上書きされる、返された結果のために許された時間です、 rpc_clnt_create(3) 参照。リモート呼び出しが成功するなら、返された状態は RPC_SUCCESS で、そうでなければ、適切な状態が返されます。
clnt_freeres()
RPC 呼び出しの結果をデコードしたとき、RPC/XDR システムによって割り付けられたどんなデータも解放する関数マクロ。 out 引数は結果のアドレスで、 outproc は結果を記述する XDR ルーチンです。このルーチンは、成功して結果が解放されたなら 1 を返し、そうでなければ 0 を返します。
clnt_geterr()
クライアントハンドルのエラー構造体をアドレス errp の構造体にコピーする関数マクロ。
clnt_perrno()
stat によって示された条件に対応するメッセージを標準エラーに印刷します。改行が追加されます。通常、クライアントハンドルが必要でないルーチン、例えば、 rpc_call() のためにプロシージャ呼び出しが失敗した後に使用されます。
clnt_perror()
RPC 呼び出しがなぜ失敗したかを示すメッセージを標準エラー印刷します。 clnt は呼び出しを行うために使用されるハンドルです。メッセージは文字列 s とコロンが先頭に追加されます。改行が追加されます。通常、クライアントハンドルを必要とするルーチン、例えば clnt_call() のためにリモートプロシージャ呼び出しが失敗した後に使用されます。
clnt_sperrno()
clnt_perrno() と同じ引数を取りますが、なぜ RPC 呼び出しが失敗したかを示すメッセージを標準エラーに送ることの代わりに、メッセージを含む文字列へのポインタを返します。 clnt_sperrno() 関数は、プログラムには標準エラーがないとき (プログラム実行と同じようにサーバがおそらくそうしない)、またはプログラマが printf() ( printf(3) 参照) でメッセージを出力したくないなら、または clnt_perrno() によってサポートされたものと異なるメッセージ形式が使用されるなら、通常 clnt_perrno() の代わりに使用されます。注: clnt_sperror() と clnt_spcreateerror() ( rpc_clnt_create(3) 参照) とは違って、 clnt_sperrno() は、結果が各呼び出しで上書きされないようにするので、静的なデータへのポインタを返しません。
clnt_sperror()
( clnt_sperrno() のように) 標準エラーに印刷することの代わりに文字列を返すことを除いて、 clnt_perror() に似ています。しかしながら、 clnt_sperror() はメッセージの終わりに改行を追加しません。警告: 各呼び出しのときに上書きされるバッファへのポインタを返します。
rpc_broadcast()
呼び出しメッセージが nettype によって指定されたすべてのコネクションレス転送にブロードキャスト (同報通信) されることを除いて、 rpc_call() に似ています。 nettypeNULL であるなら、それは“netpath”をデフォルトとします。応答を受信するたびに、このルーチンは、 eachresult() を呼び出します。その形式は次の通りです: bool_t eachresult( caddr_t out, const struct netbuf * addr, const struct netconfig * netconf) ここで out は、リモートプロシージャの出力がそこでデコードされることを除いて、 rpc_broadcast() へ渡される out と同じです。 addr は結果を送信したマシンのアドレスを指し、 netconf はリモートサーバが応答した転送の netconfig 構造体です。 eachresult() が 0 を返すなら、 rpc_broadcast() は、より多くの応答をまちます。そうでなければ、それは適切な状態で返ります。警告: ブロードキャストのファイル記述子は、その転送の最大の転送サイズに制限されます。イーサネットでは、この値は 1500 バイトです。 rpc_broadcast() 関数はデフォルトで AUTH_SYS 資格証明を使用します ( rpc_clnt_auth(3) 参照)。
rpc_broadcast_exp()
初期のタイムアウト inittime と最大のタイムアウト waittime がミリ秒で指定されることを除いて、 rpc_broadcast() に似ています。 inittime 引数は rpc_broadcast_exp() が要求を再送する前に待つ初期時間です。最初の再送の後に、 waittime を超えるまで、再転送間隔は指数関数的に増加します。
rpc_call()
マシン hostprognum, versnumprocnum に関連しているリモートプロシージャを呼び出します。 inproc 引数はプロシージャの引数をエンコードするために使用され、 outproc はプロシージャの結果をデコードするために使用されます。 in はプロシージャの複数の引数のアドレスで、 out は複数の結果をどこに置くかのアドレスです。 nettype 引数は、 rpc(3) にリストされた値のどれかを指定できます。このルーチンは成功するなら、 RPC_SUCCESS を返すか、または適切な状態が返されます。失敗状態をエラーメッセージに変換するために、 clnt_perrno() ルーチンを使用します。警告: rpc_call() は、接続を作成することができるクラス nettype に属する最初に利用可能な転送を使用します。利用者は、このルーチンを使用してタイムアウトまたは認証の制御はできません。
May 7, 1993 FreeBSD