ONC+ 開発ガイド

インタフェースルーチンの概要

RPC が提供するサービスには、さまざまなレベルのアプリケーションインタフェースがあります。レベルごとに制御の度合いが異なるため、インタフェースのコーディング量との兼ね合いで適当なレベルを使用してください。この節では、制御の度合いとプログラムの複雑さの順に、各レベルで利用できるルーチンについて要約します。

単純インタフェースのルーチン

単純インタフェースは、使用するトランスポートタイプだけを指定して、他のマシン上のルーチンを遠隔手続き呼び出しにより実行します。ほとんどのアプリケーションで、このレベルのルーチンを使用します。説明とコード例は、「単純インタフェース」を参照してください。

表 2-1 RPC ルーチン - 単純レベル

ルーチン 

説明 

rpc_reg()

手続きを RPC プログラムとして、指定したタイプのトランスポートすべてに登録する。 

rpc_call()

指定した遠隔ホスト上の、指定した手続きを遠隔呼び出しする。 

rpc_broadcast()

指定したタイプのトランスポートすべてに呼び出しメッセージをブロードキャストする。 

標準インタフェースのルーチン

標準インタフェースはトップレベル、中間レベル、エキスパートレベル、ボトムレベルの 4 つのレベルにわけられます。開発者はこれらのインタフェースを使用して、トランスポートの選択、エラーへの応答または要求の再送まで待つ時間の指定などのパラメタをかなり詳細に制御できます。

トップレベルのルーチン

トップレベルのインタフェースも簡単に使用できますが、RPC 呼び出しを行う前にクライアントハンドルを作成し、RPC 呼び出しを受ける前にサーバハンドルを作成しなければなりません。アプリケーションをすべてのトランスポート上で実行したい場合は、このインタフェースを使用してください。このルーチンの使用方法とコード例は、「トップレベルのインタフェース」を参照してください。

表 2-2 RPC ルーチン - トップレベル

ルーチン 

説明 

clnt_create()

汎用のクライアント作成ルーチン。このルーチンは、サーバの位置と、使用するトランスポートのタイプを指定して呼び出す。 

clnt_create_timed()

clnt_create() に似ているが、クライアントの作成を試みる間、各トランスポートタイプに許される最長時間を指定できる。

svc_create()

指定したタイプのトランスポートすべてに対しサーバハンドルを作成する。このルーチンは、使用するディスパッチ関数を svc_create() に指定して呼び出す。

clnt_call()

要求をサーバに送信するための手続きをクライアント側から呼び出すルーチン。 

中間レベルのインタフェース

RPC の中間レベルのインタフェースを使用すると、通信を詳細に制御できます。このような下位レベルのインタフェースを使用すると、プログラムは複雑になりますが、効率はよくなります。中間レベルでは特定のトランスポートを指定できます。このルーチンの使用方法とコード例は、「中間レベルのインタフェース」を参照してください。

表 2-3 RPC ルーチン - 中間レベル

ルーチン 

説明 

clnt_tp_create()

指定したトランスポートに対するクライアントハンドルを作成する。 

clnt_tp_create_timed()

clnt_tp_create() に似ているが、許される最長時間を指定できる。

svc_tp_create()

指定したトランスポートに対するサーバハンドルを作成する。 

clnt_call()

要求をサーバに送信するための手続きをクライアント側から呼び出す。 

エキスパートレベルのインタフェース

エキスパートレベルには、トランスポートに関連するパラメタを指定するさまざまなルーチンがあります。このルーチンの使用方法とコード例は、「エキスパートレベルのインタフェース」を参照してください。

表 2-4 RPC ルーチン - エキスパートレベル

ルーチン 

説明 

clnt_tli_create()

指定したトランスポートに対するクライアントハンドルを作成する。 

svc_tli_create()

指定したトランスポートに対するサーバハンドルを作成する。 

rpcb_set()

rpcbind デーモンを呼び出して、RPC サービスとネットワークアドレスとのマップを作成する。

rpcb_unset()

rpcb_set() で作成したマップを削除する。

rpcb_getaddr()

rpcbind デーモンを呼び出して、指定した RPC サービスのトランスポートアドレスを取り出す。

svc_reg()

指定したプログラム番号とバージョン番号のペアを、指定したディスパッチルーチンに関連付ける。 

svc_unreg()

svc_reg() で設定した関連付けを解除する。

clnt_call()

要求をサーバに送信するための手続きをクライアント側から呼び出す。 

ボトムレベルのインタフェース

ボトムレベルには、トランスポートを完全に制御することができるルーチンがあります。これらのルーチンについては、「ボトムレベルのインタフェース」を参照してください。

表 2-5 RPC ルーチン - ボトムレベル

ルーチン 

説明 

clnt_dg_create()

非接続型トランスポートを使用して、指定した遠隔プログラムに対する RPC クライアントハンドルを作成する。 

svc_dg_create()

非接続型トランスポートを使用して、RPC サーバハンドルを作成する。 

clnt_vc_create()

接続型トランスポートを使用して、指定した遠隔プログラムに対する RPC クライアントハンドルを作成する。 

svc_vc_create()

接続型トランスポートを使用して、RPC サーバハンドルを作成する。 

clnt_call()

要求をサーバに送信するための手続きをクライアント側から呼び出す。