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

名称

rpc_soc, auth_destroy, authnone_create, authunix_create, authunix_create_default, callrpc, clnt_broadcast, clnt_call, clnt_control, clnt_create, clnt_destroy, clnt_freeres, clnt_geterr, clnt_pcreateerror, clnt_perrno, clnt_perror, clnt_spcreateerror, clnt_sperrno, clnt_sperror, clntraw_create, clnttcp_create, clntudp_bufcreate, clntudp_create, clntunix_create, get_myaddress, pmap_getmaps, pmap_getport, pmap_rmtcall, pmap_set, pmap_unset, registerrpc, rpc_createerr, svc_destroy, svc_fds, svc_fdset, svc_getargs, svc_getcaller, svc_getreq, svc_getreqset, svc_register, svc_run, svc_sendreply, svc_unregister, svcerr_auth, svcerr_decode, svcerr_noproc, svcerr_noprog, svcerr_progvers, svcerr_systemerr, svcerr_weakauth, svcfd_create, svcunixfd_create, svcraw_create, svcunix_create, xdr_accepted_reply, xdr_authunix_parms, xdr_callhdr, xdr_callmsg, xdr_opaque_auth, xdr_pmap, xdr_pmaplist, xdr_rejected_reply, xdr_replymsg, xprt_register, xprt_unregisterリモートプロシージャ呼び出しためのライブラリルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < rpc/rpc.h>

関数宣言に関しては、 解説 を参照してください。

解説

このページで説明される svc_*() と clnt_*() 関数は、XDR と RPC ライブラリへの古い TS-RPC インタフェースであり、後方互換性のために存在しています。新しいインタフェースは、 rpc(3) から参照されるページに説明されています。

これらのルーチンは、C プログラムでネットワークの向こう側の他のマシンでプロシージャ呼び出しを可能にします。まず最初に、クライアントは、データパケットをサーバに送信するためのプロシージャを呼び出します。パケットを受信するとき、サーバは、要求されたサービスを実行するためにディスパッチルーチンを呼び出し、次に、応答を返信します。最終的に、プロシージャ呼び出しは、クライアントに返ります。

Secure (安全な) RPC (DES 認証) に使用されるルーチンは、 rpc_secure(3) に説明されています。 Secure RPC は、 DES 暗号化が利用可能である場合にだけ、使用することができます。

void
auth_destroy( AUTH *auth)

auth に関連している認証情報を破棄するマクロ。通常、破棄は、プライベートデータ構造体の割り付け解放を呼び出します。 auth の使用は、 auth_destroy() を呼び出した後で、未定義です。

AUTH *
authnone_create()

それぞれのリモートプロシージャ呼び出しのときに利用不可能な認証情報を渡す RPC 認証ハンドルを作成して、返します。これは、 RPC によって使用されるデフォルト認証です。

AUTH *
authunix_create( char *host, u_int uid, u_int gid, int len, u_int *aup_gids)

UNIX 認証情報を含む RPC 認証ハンドルを作成して、返します。 host 引数は、情報が作成されたマシンの名前です。 uid は、ユーザのユーザ ID です。 gid は、ユーザの現在のグループ ID です。 lenaup_gids は、ユーザが属するグループの数えられた配列を参照します。ユーザに成り済ますことは、簡単です。

AUTH *
authunix_create_default()

適切な引数で authunix_create() を呼び出します。

int callrpc( char *host, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, void *in, xdrproc_t outproc, void *out);

マシン hostprognum, versnumprocnum に関連しているリモートプロシージャを呼び出します。 in 引数は、プロシージャの引数のアドレスで、 out は、結果を置くアドレスです。 inproc は、プロシージャの引数をエンコードするのに使用され、 outproc は、プロシージャの結果をデコードするために使用されます。このルーチンは、成功すれば 0 を返すか、または、失敗するなら整数にキャスト (cast) された enum clnt_stat の値を返します。ルーチン clnt_perrno() は、失敗状態をメッセージに変換するのに便利です。

警告: このルーチンでリモートプロシージャの呼び出しは、転送として UDP/IP を使用します。制限に関して clntudp_create() を参照してください。このルーチンを使用してタイムアウトまたは認証を制御できません。

enum clnt_stat
clnt_broadcast( u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, bool_t (*eachresult)(caddr_t, struct sockaddr_in *));

呼び出しメッセージがすべてローカルに接続されたブロードキャスト (同報通信) ネットにブロードキャストされることを除いて、 callrpc() に似ています。応答を受信するたびに、このルーチンは、次の形式で eachresult() を呼び出します。

bool_t eachresult( caddr_t out, struct sockaddr_in *addr)

ここで、 out は、リモートプロシージャの出力がそこでデコードされることを除いて、 clnt_broadcast() に渡された out と同じです。 addr は、結果を送信したマシンのアドレスを指します。 eachresult() が 0 を返すなら、 clnt_broadcast() は、より多くの応答を待ちます。そうでなければ、適切な状態で返ります。

警告: ブロードキャストソケットは、データリンクの最大の転送単位のサイズに制限されます。イーサネットでは、この値は、1500 バイトです。

enum clnt_stat
clnt_call( CLIENT *clnt, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout);

clnt_create() などの RPC クライアント作成ルーチンで取得される、クライアントハンドル clnt に関連しているリモートプロシージャ procnum を呼び出すマクロ。 in 引数は、プロシージャの (複数の) 引数のアドレスで out は、(複数の) 結果を置くアドレスです。 inproc は、プロシージャの引数をエンコードするために使用され、 outproc は、プロシージャの結果をデコードするために使用されます。 tout は、結果を戻すことができる時間です。

void clnt_destroy( CLIENT *clnt)

クライアントの RPC ハンドルを破壊するマクロ。通常、破壊は、 clnt 自体を含むプライベートなデータ構造体の割り付け解放を必要とします。 clnt の使用は、 clnt_destroy() を呼び出した後は、未定義です。 RPC ライブラリが関連ソケットをオープンしたたなら、それもクローズします。そうでなければ、ソケットは、オープンしたままで残っています。

CLIENT *
clnt_create( char *host, u_long prog, u_long vers, char *proto)

一般的なクライアント作成ルーチン。 host 引数は、サーバが位置しているリモートホストの名前を識別します。 proto 引数は、どの種類の転送プロトコルが使用されるかを示します。現在このフィールドのためにサポートしている値は、“ udp”と“ tcp”です。デフォルトタイムアウトは、設定されますが、 clnt_control() を使用して変更することができます。

警告: UDP を使用することにおいて、短所があります。 UDP ベースの RPC メッセージがエンコードされたデータの最大 8 キロバイトしか保持することができないので、この転送は、大きな引数を取るか、または巨大な結果を返すプロシージャを使用することができません。

bool_t
clnt_control( CLIENT *cl, u_int req, char *info)

マクロは、クライアントオブジェクトに関する様々な情報を変更するか検索するために使用します。 req 引数は、操作のタイプを示し、 info は、情報へのポインタです。 UDP と TCP の両方に関して、 req のサポートされた値、それらの引数タイプ、とそれらが行うことは、次の通りです:

CLSET_TIMEOUT struct timeval 合計タイムアウトの設定
CLGET_TIMEOUT struct timeval 合計タイムアウトの取得

注意: 利用者が clnt_control() を使用してタイムアウトを設定するなら、 clnt_call() に渡されたタイムアウト引数は、すべての今後の呼び出しで無視されます。

CLGET_SERVER_ADDR struct sockaddr_in サーバのアドレスを取得

次の操作は、 UDP だけに、有効です:

CLSET_RETRY_TIMEOUT struct timeval 再試行タイムアウトを設定
CLGET_RETRY_TIMEOUT struct timeval 再試行タイムアウトを取得

リトライ (再試行) タイムアウトは、 UDP RPC が、要求を再転送する前にサーバが返答するのを待つ時間です。

bool_t clnt_freeres( CLIENT *clnt, xdrproc_t outproc, char *out)

RPC 呼び出しの結果をデコードしたとき、 RPC/XDR システムによって割り付けられたすべてのデータを解放するマクロ。 out 引数は、結果のアドレスで、 outproc は、結果を記述する XDR ルーチンです。このルーチンは、結果の解放が成功したなら、1 を返し、そうでなければ、0 を返します。

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

クライアントハンドルからエラー構造体をアドレス errp の構造体にコピーするマクロ。

void
clnt_pcreateerror( char *s)

なぜクライアント RPC を作成することができなかったかを示すメッセージを標準エラーに印刷 (表示) します。メッセージには、文字列 s とコロンが先頭に追加されます。メッセージの終わりで改行が追加されます。 clnt_create(), clntraw_create(), clnttcp_create() または clntudp_create() 呼び出しが失敗するとき、使用されます。

void
clnt_perrno( enum clnt_stat stat)

stat によって示された状態に対応するメッセージを標準エラーに印刷 (表示) します。メッセージの終わりで改行が追加されます。 callrpc() の後に使用されます。

void clnt_perror( CLIENT *clnt, char *s)

RPC 呼び出しがなぜ失敗したかを示すメッセージを標準エラーに印刷します。 clnt は、呼び出しを行うために使用されるハンドルです。メッセージには、文字列 s とコロンが先頭に追加されます。メッセージの終わりで改行が追加されます。 clnt_call() の後に使用されます。

char *
clnt_spcreateerror( char *s)

標準エラーに印刷 (表示) する代わりに文字列を返すことを除いて、 clnt_pcreateerror() に似ています。

バグ: 各呼び出しで上書きされる静的なデータへのポインタを返します。

char *
clnt_sperrno( enum clnt_stat stat)

clnt_perrno() と同じ引数を取りますが、 RPC 呼び出しがなぜ失敗したかを示すメッセージを標準エラーに送る代わりに、メッセージを含む文字列へのポインタを返します。

プログラムに標準エラー (サーバがおそらくそうしないプログラムの実行と同じように) がないなら、または、プログラマが printf() で出力されるメッセージが欲しくないなら、または clnt_perrno() によってサポートされたものと異なったメッセージフォーマットが使用されるなら、 clnt_sperrno() 関数は、 clnt_perrno() の代わりに使用されます。

注: clnt_sperror() と clnt_spcreateerror() と異なって、 clnt_sperrno() は、静的なデータへのポインタをに返しますが、結果は、各呼び出しで上書きされません。

char *
clnt_sperror( CLIENT *rpch, char *s)

( clnt_sperrno() のように) 標準エラーに印刷 (表示) する代わりに文字列を返すことを除いて、 clnt_perror() に似ています。

バグ: 各呼び出しで上書きされる静的なデータへのポインタを返します。

CLIENT *
clntraw_create( u_long prognum, u_long versnum)

このルーチンは、リモートプログラム prognum、バージョン versnum のために小型の RPC クライアントを作成します。メッセージをサービスに渡すためにに使用される転送は、実際にプロセスのアドレス空間中のバッファであるので、対応する RPC サーバは、同じアドレス空間に存在するべきです。 svcraw_create() を参照してください。これは、少しのカーネル干渉なしに、ラウンドトリップ時間のような RPC のシミュレーションと RPC オーバヘッドの獲得を可能にします。このルーチンは、失敗するなら、 NULL を返します。

CLIENT *
clnttcp_create( struct sockaddr_in *addr, u_long prognum, u_long versnum, int *sockp, u_int sendsz, u_int recvsz);

このルーチンは、リモートプログラム prognum、バージョン versnum のために RPC クライアントを作成します。クライアントは、転送として TCP/IP を使用します。リモートプログラムは、インターネットアドレス addr に位置付けされます。 addr->sin_port が 0 であるなら、それは、リモートプログラムが listen する (接続を受け付ける) (この情報のためには、リモート rpcbind(8) サービスを参考にしてください) 実際のポートに設定されます。 sockp 引数は、ソケットです。それが RPC_ANYSOCK であるなら、このルーチンは、新しいものをオープンして、 sockp を設定します。 TCP ベースの RPC がバッファリングした I/O を使用するので、ユーザは、 sendszrecvsz 引数で送信と受信バッファのサイズを指定できます。 0 の値は、適切なデフォルトを選びます。このルーチンは、失敗するなら、 NULL を返します。

CLIENT *
clntudp_create( struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int *sockp);

このルーチンは、リモートプログラム prognum、バージョン versnum のために RPC クライアントを作成します。クライアントは、転送として UDP/IP を使用します。リモートプログラムは、インターネットアドレス addr に位置付けされます。 addr->sin_port が 0 であるなら、それは、リモートプログラムが listen する (接続を受け付ける) (この情報のためには、リモート rpcbind(8) サービスを参考にしてください) 実際のポートに設定されます。 sockp 引数は、ソケットです。それが RPC_ANYSOCK であるなら、このルーチンは、新しいものをオープンして、 sockp を設定します。 UDP 転送は、応答が受信されるまで、または呼び出しがタイムアウトするまで、 wait 時間の間隔で呼び出しメッセージを再送信します。タイムアウトへの呼び出しのための合計の時間は、 clnt_call() によって指定されます。

警告: UDP ベースの RPC メッセージがエンコードされたデータの最大 8 キロバイトしか保持することができないので、この転送は、大きな引数を取るか、または巨大な結果を返すプロシージャで使用することができません。

CLIENT *
clntudp_bufcreate( struct sockaddr_in *addr, u_long prognum, u_long versnum, struct timeval wait, int *sockp, unsigned int sendsize, unsigned int recosize);

このルーチンは、リモートプログラム prognum、バージョン versnum のために RPC クライアントを作成します。クライアントは、転送として UDP/IP を使用します。リモートプログラムは、インターネットアドレス addr に位置付けされます。 addr->sin_port が 0 であるなら、それは、リモートプログラムが listen する (接続を受け付ける) (この情報のためにはリモート rpcbind(8) サービスを参考にしてください) 実際のポートに設定されます。 sockp 引数は、ソケットです。それが RPC_ANYSOCK であるなら、このルーチンは、新しいものをオープンして、 sockp を設定します。 UDP 転送は、応答が受信されるまで、または呼び出しがタイムアウトするまで、 wait 時間の間隔で呼び出しメッセージを再送信します。タイムアウトへの呼び出しのための合計の時間は、 clnt_call() によって指定されます。

これは、ユーザが送信と受信の UDP ベースの RPC メッセージに最大のパケットサイズを指定できるようにします。

CLIENT *
clntunix_create( struct sockaddr_un *raddr, u_long prognum, u_long versnum, int *sockp, u_int sendsz, u_int recvsz);

このルーチンは、リモートプログラム prognum、バージョン versnum のために RPC クライアントを作成します。クライアントは、転送として UNIX ドメインソケットを使用します。ローカルのプログラムは、 *raddr に位置付けされます。 sockp 引数は、ソケットです。それが RPC_ANYSOCK であるなら、このルーチンは、新しいものをオープンして、 sockp を設定します。 UNIX ベースの RPC がバッファリングした I/O を使用するので、ユーザは、 sendszrecvsz 引数で送信と受信バッファのサイズを指定できます。 0 の値は、適切なデフォルトを選びます。このルーチンは、失敗するなら、 NULL を返します。

int
get_myaddress( struct sockaddr_in *addr)

/etc/hosts を処理するライブラリルーチンを使用しないで、マシンの IP アドレスを addr に詰めます。ポート番号は、常に htons( PMAPPORT) に設定されます。成功すれば 0 を、失敗すれば 0 以外を返します。

struct pmaplist *
pmap_getmaps( struct sockaddr_in *addr)

IP アドレス addr に位置付けられるホストで、現在の RPC プログラムからポートへの (program-to-port) マッピングのリストを返す、 rpcbind(8) サービスへのユーザインタフェース。このルーチンは、 NULL を返すかもしれません。コマンド“ rpcinfo -p”は、このルーチンを使用します。

u_short
pmap_getport( struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long protocol);

プログラム番号 prognum、バージョン versnum をサポートするサービスを待ち、 protocol に関連づけられた転送プロトコルをで通話するポート番号を返す、 rpcbind(8) サービスへのユーザインタフェース。 protocol の値は、たぶん IPPROTO_UDP または IPPROTO_TCP です。 0 の返り値は、マッピングが存在しなかったか、または RPC システムがリモート rpcbind(8) サービスに接続できなかったことを意味します。後者の場合では、グローバル変数 rpc_createerr は、 RPC 状態を含んでいます。

enum clnt_stat
pmap_rmtcall( struct sockaddr_in *addr, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout, u_long *portp);

利用者に代わってそのホスト上でプロシージャへの RPC 呼び出しを行うための IP アドレス addr のホスト上で rpcbind(8) に指示する、 rpcbind(8) サービスへのユーザインタフェース。 portp 引数は、プロシージャが成功するなら、プログラムのポート番号を変更します。他の引数の定義は、 callrpc() と clnt_call() で議論されます。このプロシージャは、“ping”で使用されますが、他では使用されません。また、 clnt_broadcast() を参照してください。

bool_t pmap_set( u_long prognum, u_long versnum, u_long protocol, u_short port)

マシンの rpcbind(8) サービスで 3 つの ( prognum, versnum, protocol) と port の間のマッピングを確立する、 rpcbind(8) サービスへのユーザインタフェース。 protocol の値は、たぶん IPPROTO_UDP または IPPROTO_TCP です。このルーチンは、成功すれば、1 を返し、そうでなければ、0 を返します。 svc_register() によって自動的に行われます。

bool_t pmap_unset( u_long prognum, u_long versnum)

マシンの rpcbind(8) サービスで 3 つの ( prognum, versnum, *) と ports の間のマッピングを破壊する、 rpcbind(8) サービスへのユーザインタフェース。このルーチンは、成功すれば、1 を返し、そうでなければ、0 を返します。

bool_t registerrpc( u_long prognum, u_long versnum, u_long procnum, char *(*procname)(void), xdrproc_t inproc, xdrproc_t outproc);

RPC サービスパッケージでプロシージャ procname を登録します。プログラム prognum、バージョン versnum のための要求が到着するなら、プロシージャ procnum, procname は、その (複数の) 引数へのポインタで呼び出されます。 progname は、静的な (複数の) 結果へのポインタを返すべきです。 inproc は、引数をデコードするためにに使用され、一方 outproc は、結果をエンコードするために使用されます。このルーチンは、登録が成功したなら、0 を返し、そうでなければ、-1 を返します。

警告: この形式で登録されたリモートプロシージャは、 UDP/IP 転送を使用してアクセスされます。制限に関しては、 svcudp_create() を参照してください。

struct rpc_createerr rpc_createerr;

すべての成功しない RPC クライアント作成ルーチンによって値が設定されるグローバル変数理由を印刷 (表示) するためには、ルーチン clnt_pcreateerror() を使用します。

bool_t svc_destroy( SVCXPRT * xprt)

RPC サービス転送ハンドル、 xprt を破壊するマクロ。通常、破壊は、 xprt 自体を含むプライベートなデータ構造体の割り付け解放を必要とします。 xprt の使用は、このルーチンを呼んだ後で未定義です。

fd_set svc_fdset;

RPC サービス側の読み込みファイル記述子のビットマスクを反映するグローバル変数。それは、テンプレート引数として select(2) システムコールに適切です。これは、サービス作成者が、 svc_run() を呼び出さないのではなく、むしろ彼自身の非同期なイベント処理を行う場合にだけ影響がありますが、この変数は、読み込み専用です (そのアドレスを select(2) に渡してはいけません!)、さらに、それは、 svc_getreqset() または任意の作成ルーチンを呼び出した後で、変化するかもしれません。また、 FD_SETSIZE を越えて拡張される記述子の制限がプロセスにあるなら、この変数は、最初の FD_SETSIZE 記述子だけが使用可能になることに注意してください。

int svc_fds;

svc_fdset と同様ですが、32 個の記述子に制限されています。このインタフェースは、 svc_fdset によって時代遅れになっています。

bool_t svc_freeargs( SVCXPRT *xprt, xdrproc_t inproc, char *in)

引数を svc_getargs() を使用してサービスプロシージャにデコードしたとき RPC/XDR システムによって割り付けられたすべてのデータを解放するマクロ。このルーチンは、解放が成功したなら、 1 を返し、そうでなければ、0 を返します。

bool_t svc_getargs( SVCXPRT *xprt, xdrproc_t inproc, char *in)

RPC サービス転送ハンドル、 xprt に関連している RPC 要求の引数をデコードするマクロ。 in 引数は、引数が置かれるアドレスです。 inproc は、引数をデコードするために使用される XDR ルーチンです。このルーチンは、デコードが成功すれば、1 を返し、そうでなければ、0 を返します。

struct sockaddr_in *
svc_getcaller( SVCXPRT *xprt)

RPC サービス転送ハンドル xprt に関連しているプロシージャの呼び出し側のネットワークアドレスを得る承認された方法。

void svc_getreqset( fd_set *rdfds)

このルーチンは、サービス作成者が、 svc_run() を呼び出さない場合にだけ関係がありますが、代わりにカスタム非同期イベントプロセスを実装します。 RPC 要求が、いくつかの RPC (複数の) ソケットに到着したことを select(2) システムコールが決定するとき、それは呼び出されます。 rdfds は、結果の読み込みファイル記述子ビットマスクです。 rdfds の値に関連しているすべてのソケットがサービスされたとき、このルーチンは、返ります。

void svc_getreq( int rdfds)

svc_getreqset() と同様ですが、32 個の記述子に制限されています。このインタフェースは、 svc_getreqset() によって時代遅れになっています。

bool_t svc_register( SVCXPRT *xprt, u_long prognum, u_long versnum, void (*dispatch)(struct svc_req *, SVCXPRT *), int protocol);

prognumversnum をサービスディスパッチプロシージャ dispatch() に関連付けます。 protocol が 0 であるなら、サービスは、 rpcbind(8) サービスに登録されません。 protocol が 0 でないなら、 xprt->xp_port への 3 つの ( prognum, versnum, protocol) へのマッピングは、ローカル rpcbind(8) サービス (一般的に protocol は、0、 IPPROTO_UDP または IPPROTO_TCP です) で確立されますプロシージャ dispatch() は、次の形式があります:

bool_t dispatch( struct svc_req *request, SVCXPRT *xprt)

svc_register() ルーチンは、成功するなら、1 を返し、そうでなければ、 0 を返します。

svc_run()

このルーチンは、決して返りません。それは、到着する RPC 要求を待ち、 1 つが到着するとき、適切なサービスプロシージャを svc_getreq() を使用して呼び出します。通常、このプロシージャは、 select(2) システムコールが返るのを待ちます。

bool_t svc_sendreply( SVCXPRT *xprt, xdrproc_t outproc, char *out)

リモートプロシージャ呼び出しの結果を送信するために、 RPC サービスのディスパッチルーチンによって呼び出されます。 xprt 引数は、要求の関連する転送ハンドルです。 outproc は、結果をエンコードするために使用される XDR ルーチンで、 out は、結果のアドレスです。このルーチンは、成功すれば、1 を返し、そうでなければ、0 を返します。

void
svc_unregister( u_long prognum, u_long versnum)

ディスパッチルーチンへの 2 つの ( prognum, versnum) のすべてのマッピングとポート番号への 3 つの ( prognum, versnum, *) のすべてのマッピングを取り除きます。

void
svcerr_auth( SVCXPRT *xprt, enum auth_stat why)

認証エラーのためにリモートプロシージャ呼び出しを実行することを拒否するサービスディスパッチルーチンによって呼び出されます。

void
svcerr_decode( SVCXPRT *xprt)

うまく引数をデコードすることができないサービスディスパッチルーチンによって呼び出されます。 svc_getargs() も参照してください。

void
svcerr_noproc( SVCXPRT *xprt)

呼び出し側が要求するプロシージャ番号を実装しないサービスディスパッチルーチンによって呼び出されます。

void
svcerr_noprog( SVCXPRT *xprt)

必要なプログラムが RPC パッケージに登録されないとき、呼び出されます。通常、サービス作成者は、このルーチンを必要としません。

void
svcerr_progvers( SVCXPRT *xprt, u_long low_vers, u_long high_vers)

プログラムの必要なバージョンが RPC パッケージに登録されないとき、呼び出されます。通常、サービス作成者は、このルーチンを必要としません。

void
svcerr_systemerr( SVCXPRT *xprt)

どんな特別のプロトコルでもカバーされなかったシステムエラーを検出するとき、サービスディスパッチルーチンによって呼び出されます。例えば、サービスがもは、や記憶域を割り付けることができないなら、このルーチンを呼び出すかもしれません。

void
svcerr_weakauth( SVCXPRT *xprt)

不適当な認証引数のためにリモートプロシージャ呼び出しを実行するのを拒否するサービスディスパッチルーチンによって呼び出されます。ルーチンは、 svcerr_auth( xprt, AUTH_TOOWEAK) を呼び出します。

SVCXPRT *
svcraw_create( void)

このルーチンは、ポインタを返す、小型の RPC サービス転送を作成します。転送が実際にプロセスのアドレス空間中のバッファであるので、対応する RPC クライアントは、同じアドレス空間に存在するべきです。 clntraw_create() を参照してください。このルーチンは、少しのカーネル干渉なしで RPC のシミュレーションと RPC オーバヘッドの (ラウンドトリップ時間のような) 獲得を可能とします。このルーチンは、失敗するなら、 NULL を返します。

SVCXPRT *
svctcp_create( int sock, u_int send_buf_size, u_int recv_buf_size)

このルーチンは、ポインタを返す、 TCP/IP ベースの RPC サービス転送を作成します。転送は、 RPC_ANYSOCK であるかもしれない、ソケット sock に関連しています。 RPC_ANYSOCK の場合、新しいソケットが作成されます。ソケットがローカル TCP ポートにバインドされないなら、このルーチンは、任意のポートにそれをバインドします。完了時に、 xprt->xp_fd は、転送のソケット記述子で、 xprt->xp_port は、転送のポート番号です。このルーチンは、失敗するなら、 NULL を返します。 TCP ベースの RPC は、バッファリングした I/O を使用するので、ユーザは、バッファのサイズを指定できます。 0 の値は、適切なデフォルトを選びます。

SVCXPRT *
svcunix_create( int sock, u_int send_buf_size, u_int recv_buf_size, char *path)

このルーチンは、ポインタを返す、 UNIX ベースの RPC サービス転送を作成します。転送は、 RPC_ANYSOCK であるかもしれない、ソケット sock に関連しています。 RPC_ANYSOCK の場合、新しいソケットが作成されます。 *path 引数は、高々 104 文字の可変長のファイルシステムパス名です。ソケットがクローズされるとき、このファイルは、削除 されません。 ファイルを削除するためには、 unlink(2) システムコールを使用しなければなりません。完了時に、 xprt->xp_fd は、転送のソケット記述子です。このルーチンは、失敗するなら、 NULL を返します。 UNIX ベースの RPC は、バッファリングした I/O を使用するので、ユーザは、バッファのサイズを指定できます。 0 の値は、適切なデフォルトを選びます。

SVCXPRT *
svcunixfd_create( int fd, u_int sendsize, u_int recvsize)

任意のオープンしている先頭の記述子でサービスを作成します。 sendsizerecvsize 引数は、送信、受信バッファのサイズを示します。それらが 0 であるなら、妥当なデフォルトが選ばれます。

SVCXPRT *
svcfd_create( int fd, u_int sendsize, u_int recvsize)

任意のオープンしている先頭の記述子でサービスを作成します。通常、この記述子は、 TCP のようなストリームプロトコルのための接続されたソケットです。 sendsizerecvsize 引数は、送信、受信バッファのサイズを示します。それらが 0 であるなら、妥当なデフォルトが選ばれます。

SVCXPRT *
svcudp_bufcreate( int sock, u_int sendsize, u_int recvsize)

このルーチンは、ポインタを返す、 UDP/IP ベースの RPC サービス転送を作成します。転送は、 RPC_ANYSOCK であるかもしれない、ソケット sock に関連しています。 RPC_ANYSOCK の場合、新しいソケットが作成されます。ソケットがローカル UDP ポートにバインドされないなら、このルーチンは、任意のポートにそれをバインドします。完了時に、 xprt->xp_fd は、転送のソケット記述子で、 xprt->xp_port は、転送のポート番号です。このルーチンは、失敗するなら、 NULL を返します。

これは、ユーザが送信と受信の UDP ベースの RPC メッセージに最大のパケットサイズを指定できるようにします。

bool_t xdr_accepted_reply( XDR *xdrs, struct accepted_reply *ar)

RPC 応答メッセージをエンコードするために使用されます。このルーチンは、 RPC パッケージを使用しないで RPC スタイルのメッセージを生成したいユーザの役に立ちます。

bool_t xdr_authunix_parms( XDR *xdrs, struct authunix_parms *aupp)

UNIX 資格証明を記述するために使用されます。このルーチンは、 RPC 認証パッケージを使用しないでこれらの資格証明を生成したいユーザの役に立ちます。

void
bool_t xdr_callhdr( XDR *xdrs, struct rpc_msg *chdr)

RPC 呼び出しヘッダメッセージを記述するために使用されます。このルーチンは、 RPC パッケージを使用しないで RPC スタイルのメッセージを生成したいユーザの役に立ちます。

bool_t xdr_callmsg( XDR *xdrs, struct rpc_msg *cmsg)

RPC 呼び出しメッセージを記述するために使用されます。このルーチンは、 RPC パッケージを使用しないで RPC スタイルのメッセージを生成したいユーザの役に立ちます。

bool_t xdr_opaque_auth( XDR *xdrs, struct opaque_auth *ap)

RPC 認証情報メッセージを記述するために使用されます。このルーチンは、 RPC パッケージを使用しないで RPC スタイルのメッセージを生成したいユーザの役に立ちます。

struct pmap;
bool_t xdr_pmap( XDR *xdrs, struct pmap *regs)

外部的に様々な rpcbind(8) プロシージャへの引数を記述するために使用されます。このルーチンは、 pmap_*() インタフェースを使用しないでこれらの引数を生成したいユーザの役に立ちます。

bool_t xdr_pmaplist( XDR *xdrs, struct pmaplist **rp)

外部的にポートマッピングのリストを記述するために使用されます。このルーチンは、 pmap_*() インタフェースを使用しないでこれらの引数を生成したいユーザの役に立ちます。

bool_t xdr_rejected_reply( XDR *xdrs, struct rejected_reply *rr)

RPC 応答メッセージを記述するために使用されます。このルーチンは、 RPC パッケージを使用しないで RPC スタイルのメッセージを生成したいユーザの役に立ちます。

bool_t xdr_replymsg( XDR *xdrs, struct rpc_msg *rmsg)

RPC 応答メッセージを記述するために使用されます。このルーチンは、 RPC パッケージを使用しないで RPC スタイルのメッセージを生成したいユーザの役に立ちます。

void
xprt_register( SVCXPRT *xprt)

RPC サービス転送ハンドルが作成された後に、それらは、 RPC サービスパッケージでそれら自体で登録するべきです。このルーチンは、グローバル変数 svc_fds を変更します。通常、サービス作成者は、このルーチンを必要としません。

void
xprt_unregister( SVCXPRT *xprt)

RPC サービス転送ハンドルが破壊される前に、それは、 RPC サービスパッケージでそれら自体の登録を取り消すべきです。このルーチンは、グローバル変数 svc_fds を変更します。通常、サービス作成者は、このルーチンを必要としません。

関連項目

rpc_secure(3), xdr(3) Remote Procedure Calls: Protocol Specification. Remote Procedure Call Programming Guide. rpcgen Programming Guide. RPC: Remote Procedure Call Protocol Specification, Sun Microsystems, Inc., USC-ISI, RFC1050.
February 16, 1988 FreeBSD