rpc

Autres langues

Langue: ja

Version: 2007-05-18 (mandriva - 01/05/08)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

名前

rpc - 遠隔手続き呼び出し(RPC)のためのライブラリ・ルーティン

書式と説明

これらのルーティンは C プログラムでネットワークを通して 他のマシンにアクセスするプロシジャを作成することを可能にする。 最初にクライアントはデータパケットをサーバに送るために プロシジャを呼び出す。 サーバはパケットを受け取ると、配分ルーチンを呼び出して 要求されたサービスに実行し、返答を送り返す。 最後にプロシジャ・コールはクライアントへと戻る。
 
 #include <rpc/rpc.h>
 

 
 void
 auth_destroy(auth)
 AUTH *auth;
 
このマクロは auth に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の 破棄を含んでいる。 auth_destroy() を呼び出した後に auth を使用することは未定義である。
 
 AUTH *
 authnone_create()
 
各リモート・プロシジャ・コールで使用できない仮の認証情報として渡される RPC 認証ハンドルを作成して返す。これは RPC で使用されるデフォルトの認証である。
 
 AUTH *
 authunix_create(host, uid, gid, len, aup_gids)
 char *host;
 int uid, gid, len, *aup.gids;
 
認証情報を含んだ RPC 認証ハンドルを作成して返す。 host パラメーターは情報が作成されたマシンの名前である。 uid はそのユーザのユーザ IDgid はそのユーザの現在のグループ ID である。 lenaup_gids はそのユーザが所属するグループの配列を参照している。 他のユーザになりすますことは簡単である。
 
 AUTH *
 authunix_create_default()
 
適切なパラメーターで authunix_create() を呼び出す。
 
 callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
 char *host;
 u_long prognum, versnum, procnum;
 char *in, *out;
 xdrproc_t inproc, outproc;
 
マシン host 上で prognum, versnum, procnum に関連付けられたリモート・プロシジャを呼び出す。 パラメーター in はプロシジャの引き数のアドレスであり out は結果を格納するアドレスである。 inproc はプロシジャのパラメーターをエンコードするのに使用され、 outproc は結果をデコードするのに使用される。 このルーティンは成功した場合にはゼロを返す。失敗した場合には enum clnt_stat を整数にキャストした値を返す。 clnt_perrno() ルーティンが失敗の状態をメッセージに変換するのに使用できる。
警告: このルーティンでリモート・プロシジャを呼び出すと通信には UDP/IP が使用される。この際の制限については clntudp_create() を参照すること。このルーティンを使用して認証や時間切れの制御を することはできない。
 
 enum clnt_stat
 clnt_broadcast(prognum, versnum, procnum, inproc, in, outproc, out, eachresult)
 u_long prognum, versnum, procnum;
 char *in, *out;
 xdrproc_t inproc, outproc;
 resultproc_t eachresult;
 
callrpc() と同様であるが、メッセージがローカルのブロードキャスト・ネットワーク 全体へとブロードキャストされる点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult() を呼び出す。
 eachresult(out, addr)
 char *out;
 struct sockaddr_in *addr;
 
ここで outclnt_broadcast() に渡される out と同じであるが、リモート・プロシジャからの出力がデコードされている 点のみが異っている。 addr は結果を送って来たマシンのアドレスを指している。 eachresult() がゼロを返した場合、 clnt_broadcast() はさらなる回答を待つ。そうでなければ適切な状態で終了する。
警告: ブロードキャスト・ソケットはデータリンク層の最大転送単位に 制限されている。イーサネットの場合、最大値は 1500 バイトである。
 
 enum clnt_stat
 clnt_call(clnt, procnum, inproc, in, outproc, out, tout)
 CLIENT *clnt;
 u_long
 procnum;
 xdrproc_t inproc, outproc;
 char *in, *out;
 struct timeval tout;
 
このマクロはクライアント・ハンドル clnt に関連付けられた procnum リモート・プロシジャを呼び出す。 クライアント・ハンドルは clnt_create() のような RPC クライアント作成ルーティンによって得られる。 パタメータ in はプロシジャの引き数のアドレスである。 out はプロシジャの返り値を格納するアドレスである。 inproc はプロシジャのパラメーターをエンコードするのに使用される。 outproc はプロシジャの返り値をデコードするのに使用される。 tout は結果が返されるのを待つ時間である。
 
 clnt_destroy(clnt)
 CLIENT *clnt;
 
このマクロはクライアントの RPC ハンドルを破壊する。破壊には通常は clnt 自身も含めて私的なデータ構造体の破棄が含まれている。 clnt_destroy() の呼び出しの後に clnt を使用することは未定義である。 RPC ライブラリが関連するソケットをオープンした場合には、 それも閉じられる。それ以外の場合にはソケットはオープンされたままである。
 
 CLIENT *
 clnt_create(host, prog, vers, proto)
 char *host;
 u_long prog, vers;
 char *proto;
 
一般的なクライアントの作成ルーティンである。 host はサーバのあるリモートホストの名前を指定する。 proto どのような通信プロトコルを使用するかを指定する。現在ここに 使用できる値は "udp" と "tcp" である。 デフォルトの時間切れが設定されるが、 clnt_control() を使用して変更可能である。
警告: UDP を使用した場合には欠点がある。 UDP に基づいた RPC メッセージは最大でも 8 KByte のエンコードデータしか保持する ことができないため、大きな引き数や巨大な結果を取るプロシジャに は使用することができない。
 
 bool_t
 clnt_control(cl, req, info)
 CLIENT *cl;
 char *info;
 
このマクロは各種クライアントについて情報を変更したり、取得したり するのに使用する。 req は操作の種類を指定する。 info は情報へのポインターである。 UDPTCP どちらの場合も使用可能な req の値と、その引き数の型、およびその内容は以下の通りである:
 
 CLSET_TIMEOUT       struct timeval      時間切れを設定するCLGET_TIMEOUTstruct timeval時間切れを取得する
注意:
clnt_control() を使用して時間切れを設定した場合にはそれ以後は clnt_call() に渡される時間切れパラメーターは全て無視される。
 CLGET_SERVER_ADDR   struct sockaddr_in  サーバアドレスを取得する

以下の操作は
UDP の場合にのみ有効である:
 
 CLSET_RETRY_TIMEOUT struct timeval      再送間隔を設定するCLGET_RETRY_TIMEOUTstruct timeval再送間隔を取得する

再送間隔は次に要求を再送する前に
UDP RPC がサーバの回答を待つ時間である。
 
 clnt_freeres(clnt, outproc, out)
 CLIENT *clnt;
 xdrproc_t outproc;
 char *out;
 
このマクロは RPC 呼び出しの結果のデコードの際に RPC/XDR システムによって割当てられたデータを解放する。 パラメーター out は結果のアドレスである。 outproc は結果を記述している XDR ルーティンである。このルーティンは結果の解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。
 
 void
 clnt_geterr(clnt, errp)
 CLIENT *clnt;
 struct rpc_err *errp;
 
このマクロはクライアント・ハンドルのエラー構造体を errp アドレスで指定された構造体へコピーする。
 
 void
 clnt_pcreateerror(s)
 char *s;
 
標準エラー出力に、なぜクライアント RPC ハンドルの作成ができなかったかについてのメッセージを表示する。 メッセージの前に文字列 s とコロン(:)が表示される。 clnt_create(), clntraw_create(), clnttcp_create(), clntudp_create() の呼び出しが失敗した時に使用すること。
 
 void
 clnt_perrno(stat)
 enum clnt_stat stat;
 
標準エラー出力に stat によって指示されるエラー状態に対応するメッセージを表示する。 callrpc() の後に使用すること。
 
 clnt_perror(clnt, s)
 CLIENT *clnt;
 char *s;
 
標準エラー出力に、なぜ RPC 呼び出しが失敗したかについてのメッセージを表示する。 clnt はコールに使用したハンドルである。 メッセージの前に文字列 s とコロン(:)が表示される。 clnt_call() が失敗した後に使用すること。
 
 char *
 clnt_spcreateerror
 char *s;
 
clnt_pcreateerror() と同様であるが、標準エラー出力へ表示するかわりに文字列を返す点が異っている。
バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
 
 char *
 clnt_sperrno(stat)
 enum clnt_stat stat;
 
clnt_perrno() と同じ引き数を取るが、なぜ RPC 呼び出しが失敗したかについてのメッセージを標準エラー出力に表示する かわりに、メッセージを格納している文字列へのポインターを返す。 文字列は NEWLINE(改行) で終っている。
clnt_sperrno() はプログラムが標準エラー出力を持っていない場合(プログラムがサーバとし て走っている場合にはよくありえる)や、プログラマーがメッセージを printf() で出力することを望まない場合や、メッセージの形式が clnt_perrno() がサポートするものとは異っている場合などに clnt_perrno() のかわりに使用される。 注意: clnt_sperror() や clnt_spcreaterror() とは違って clnt_sperrno() は静的データへのポインターを返す。しかし呼び出しごとに上書きされることはない。
 
 char *
 clnt_sperror(rpch, s)
 CLIENT *rpch;
 char *s;
 
clnt_perror() と同様であるが、標準エラー出力に表示する代りに (clnt_sperrno() のように) 文字列へのポインターを返す点が異っている。
バグ: 呼び出しごとに上書きされる静的データへのポインターを返す。
 
 CLIENT *
 clntraw_create(prognum, versnum)
 u_long prognum, versnum;
 
このルーティンはリモート・プログラム prognum、 バージョン versnum のための擬似 RPC クライアントを作成する。メッセージをサービスに渡すために使用する 通信は実際にはそのプロセスのアドレス空間にあるバッファーである。 それで、対応する RPC サーバが同じアドレス空間の中にいなければならない。 svcraw_create() を参照すること。 これにより RPC のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの RPC オーバヘッドの獲得ができる。失敗した場合にはこのルーティンは NULL を返す。
 
 CLIENT *
 clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz)
 struct sockaddr_in *addr;
 u_long prognum, versnum;
 int *sockp;
 u_int sendsz, recvsz;
 
このルーティンはリモート・プログラム prognum、 バージョン versnum のための RPC クライアントを作成する。クライアントは通信に TCP/IP を使用する。リモート・プログラムはインターネット・アドレスの *addr にある。 addr->sin_port がゼロならば、実際にリモート・プログラムが listen しているポートが設定される。(この情報のためにリモートの portmap サービスが利用される。) パラメーター sockp はソケットである。もしこれが RPC_ANYSOCK に設定されている場合は、このルーティンが新しいソケットをオープンして sockp に設定する。 TCP に基づいた RPC はバッファされた I/O を使用するため、ユーザはパラメーター sendszrecvsz を使用して送信バッファと受信バッファのサイズを指定することができる。 ゼロを指定した場合には適切なデフォルトが選択される。 このルーティンは失敗した場合は NULL を返す。
 
 CLIENT *
 clntudp_create(addr, prognum, versnum, wait, sockp)
 struct sockaddr_in *addr;
 u_long prognum, versnum;
 struct timeval wait;
 int *sockp;
 
このルーティンはリモート・プログラム prognum、 バージョン versnum のための RPC クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの *addr にある。 addr->sin_port がゼロならば、実際にリモート・プログラムが listen しているポートが設定される。(この情報のためにリモートの portmap サービスが利用される。) パラメーター sockp はソケットである。もしこれが RPC_ANYSOCK に設定されている場合は、このルーティンが新しいソケットをオープンして sockp に設定する。 UDP 通信は回答があるか、時間切れが起こるまで wait 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は clnt_call() で指定する。
警告: UDP に基づいた RPC メッセージは最大でも 8 Kbyte までのエンコードされたデータしか 保持できないため、この通信は大きな引き数や巨大な結果を取る プロシジャには使用できない。
 
 CLIENT *
 clntudp_bufcreate(addr, prognum, versnum, wait, sockp, sendsize, recosize)
 struct sockaddr_in *addr;
 u_long prognum, versnum;
 struct timeval wait;
 int *sockp;
 unsigned int sendsize;
 unsigned int recosize;
 
このルーティンはリモート・プログラム prognum、 バージョン versnum のための RPC クライアントを作成する。クライアントは通信に UDP/IP を使用する。リモート・プログラムはインターネット・アドレスの *addr にある。 addr->sin_port がゼロならば、実際にリモート・プログラムが listen しているポートが設定される。(この情報のためにリモートの portmap サービスが利用される。) パラメーター sockp はソケットである。もしこれが RPC_ANYSOCK に設定されている場合は、このルーティンが新しいソケットをオープンして sockp に設定する。 UDP 通信は回答があるか、時間切れが起こるまで wait 間隔で呼び出しメッセージを再送する。時間切れが起こるまでの合計時間は clnt_call() で指定する。
これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや受信パケットの最大サイズを指定すること が可能になる。
 
 void
 get_myaddress(addr)
 struct sockaddr_in *addr;
 
このマシンの IP アドレスを *addr に格納する。 /etc/hosts を扱うライブラリ・ルーティンは使用しない。ポート番号は常に htons(PMAPPORT) に設定される。
 
 struct pmaplist *
 pmap_getmaps(addr)
 struct sockaddr_in *addr;
 
portmap サービスのためのユーザインターフェースであり、 IP アドレス *addr にあるホストの現在の RPC プログラムからポート番号へのマッピングの一覧を返す。 このルーティンが NULL を返す場合もある。 `rpcinfo -p' コマンドはこのルーティンを使用している。
 
 u_short
 pmap_getport(addr, prognum, versnum, protocol)
 struct sockaddr_in *addr;
 u_long prognum, versnum, protocol;
 
portmap サービスのためのユーザ・インターフェースで、 プログラム番号 prognum、 バージョン versnum、 関連付けられた通信プロトコル protocol をサポートするサービスが待っているポート番号を返す。 protocol の値はほとんどの場合 IPPROTO_UDPIPPROTO_TCP である。返り値ゼロはマッピングが存在しないか、 RPC システムがリモートの portmap サービスの参照に失敗したことを意味する。後者の場合は大域変数 rpc_createerr() が RPC 状態を保持している。
 
 enum clnt_stat
 pmap_rmtcall(addr, prognum, versnum, procnum, inproc, in, outproc, out, tout, portp)
 struct sockaddr_in *addr;
 u_long prognum, versnum, procnum;
 char *in, *out;
 xdrproc_t inproc, outproc;
 struct timeval tout;
 u_long *portp;
 
portmap サービスのためのユーザ・インターフェースで、 IP アドレス *addr のホストの portmap を参照して、 RPC 呼び出しを生成し、そのホスト上のプロシジャを呼び出す。 パラメーター *portp はプロシジャが成功した場合にはプログラムのポート番号に修正される。 他のパラメーターの定義については callrpc() や clnt_call() で説明してある。 このプロシジャは "ping" のみに使用すべきである。 clnt_broadcast() も参照すること。
 
 pmap_set(prognum, versnum, protocol, port)
 u_long prognum, versnum, protocol;
 u_short port;
 
portmap サービスのためのユーザ・インターフェースで、 [prognum,versnum,protocol] の組み合わせと port との間のマッピングを、そのマシン上の portmap サービスに登録する。 protocol はほとんどの場合 IPPROTO_UDPIPPROTO_TCP のどちらかである。 このルーティンは成功した場合には 1 を返す。失敗した場合にはゼロを返す。 svc_register() によって自動的に実行される。
 
 pmap_unset(prognum, versnum)
 u_long prognum, versnum;
 
portmap サービスのためのユーザ・インターフェースで、 [prognum,versnum,*] の組み合わせと ports の間のマッピングをそのマシン上の portmap サービスから削除する。このルーティンは成功した場合は 1 を返す。 失敗した場合には 0 を返す。
 
 registerrpc(prognum, versnum, procnum, procname, inproc, outproc)
 u_long prognum, versnum, procnum;
 char *(*procname) () ;
 xdrproc_t inproc, outproc;
 
RPC サービスパッケージを使用して procname プロシジャを登録する。プログラム prognum、 バージョン versnum、 プロシジャ procnum への要求が届いた場合、 procname がパラメーターへのポインターを持って呼び出される。 progname は静的な結果へのポインターを返す必要がある。 inproc はパラメーターをデコードするために使用される。 outproc は結果をエンコードするために使用される。 このルーティンは登録に成功した場合にはゼロを返す。 失敗した場合には -1を返す。
警告: この形式で登録されたリモート・プロシジャは UDP/IP 通信を使用する。制限に関しては svcudp_create() を参照すること。
 
 struct rpc_createerr     rpc_createerr;
 
成功しなかった RPC クライアント生成ルーティンによって設定される大域変数。 clnt_pcreateerror() ルーティンが理由を表示するために使用する。
 
 svc_destroy(xprt)
 SVCXPRT *
 xprt;
 
このマクロは通信ハンドル xprtRPC サービスを破壊する。破壊には通常、 xprt を含めて、私的なデータ構造体の破棄が含まれている。 このルーティンを呼び出した後に xprt を使用することは未定義である。
 
 fd_set svc_fdset;
 
RPC サービス側のファイル・ディスクリプターのビットマスクを反映した大域変数。 select() システムコールのパラメーターのために利用できる。これは サービスの実装者が svc_run() を呼び出さなずに、独自の非同期イベント処理を用いる場合にのみ意味がある。 この変数は読み込み専用で (そのまま select() へ渡してはならない!)、 svc_getreqset() 呼び出しや生成ルーティンの後に変更されているかもしれない。
 
 int svc_fds;
 
svc_fedset に似ているが、32 ディスクリプターに制限されている。 このインターフェースは svc_fdset によって置き換えられた。
 
 svc_freeargs(xprt, inproc, in)
 SVCXPRT *xprt;
 xdrproc_t inproc;
 char *in;
 
このマクロはサービス・プロシジャが svc_getargs() を使用して引き数をデコードした時に RPC/XDR システムによって割り当てられたデータを解放する。 このルーティンは解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。
 
 svc_getargs(xprt, inproc, in)
 SVCXPRT *xprt;
 xdrproc_t inproc;
 char *in;
 
このマクロは RPC サービス通信ハンドル xprt に関連付けられた RPC 要求の引き数をデコードする。パラメーター in は引き数の格納されたアドレスである。 inproc は引き数をデコードするための XDR ルーティンである。 このルーティンはデコードに成功した場合は 1 を返す。 失敗した場合はゼロを返す。
 
 struct sockaddr_in *
 svc_getcaller(xprt)
 SVCXPRT *xprt;
 
RPC サービス通信ハンドル xprt に関連付けられたプロシジャの呼び出し元のネットワーク・アドレスを 取得するための標準的な手段。
 
 svc_getreqset(rdfds)
 fd_set *rdfds;
 
このルーティンはサービスの実装者が svc_run() を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。 これは select() システムコールが RPC ソケットに RPC 要求が到着したと返した場合にのみ呼び出される。 rdfds は結果の読み込みファイル・ディスクリプターのビットマスクである。 このルーティンは rdfds の値に関連付けられた全てのソケットのサービスが行なわれた時に 返ってくる。
 
 svc_getreq(rdfds)
 int rdfds;
 
svc_getreqset() に似ているがディスクリプターの数が 32 に制限されている。 このインターフェースは svc_getreqset() によって置き換えられた。
 
 svc_register(xprt, prognum, versnum, dispatch, protocol)
 SVCXPRT *xprt;
 u_long prognum, versnum;
 void (*dispatch) ();
 u_long protocol;
 
prognumversnum をサービス配分プロシジャ dispatch で関連付ける。 protocol がゼロの場合、サービスは portmap サービスには登録されない。 protocol がゼロ以外の場合、 [prognum,versnum,protocol] の組み合わせと xprt->xp_port とのマッピングがローカルの portmap サービスに登録される。(一般的に protocol はゼロ、 IPPROTO_UDPIPPROTO_TCP のどれかである。) プロシジャ dispatch は以下の形式である:
 dispatch(request, xprt)
 struct svc_req *request;
 SVCXPRT *xprt;
 
svc_register() ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
 
 svc_run()
 
このルーティンは戻ってこない。これは RPC 要求の到着を待ち、どれかが届いた場合に svc_getreq() を使用して適切なサービス・プロシジャを呼び出す。 このプロシジャは通常は select() システムコールから返るのを待っている。
 
 svc_sendreply(xprt, outproc, out)
 SVCXPRT *xprt;
 xdrproc_t outproc;
 char *out;
 
RPC サービス配分ルーティンによってリモート・プロシジャ・コールの結果を 返すために呼び出される。 パラメーター xprt はその要求に関連付けられた通信ハンドルである。 outproc は結果をエンコードするために使用する XDR ルーティンである。 out は結果のアドレスである。このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
 
 void
 svc_unregister(prognum, versnum)
 u_long prognum, versnum;
 
配分ルーティンから [prognum,versnum] および [prognum,versnum,*] の組み合わせからポート番号へのマッピングを全て削除する。
 
 void
 svcerr_auth(xprt, why)
 SVCXPRT *xprt;
 enum auth_stat why;
 
認証エラーによりリモート・プロシジャ・コールの実行を拒否された 場合にサービス配分ルーティンによって呼び出される。
 
 void
 svcerr_decode(xprt)
 SVCXPRT *xprt;
 
パラメータのデコードに失敗した場合に サービス配分ルーティンによって呼び出される。 svc_getargs() も参照すること。
 
 void
 svcerr_noproc(xprt)
 SVCXPRT *xprt;
 
要求のあったプロシジャ番号が実装されていない場合に サービス配分ルーティンより呼び出される。
 
 void
 svcerr_noprog(xprt)
 SVCXPRT *xprt;
 
RPC パッケージに要求されたプログラムが登録されていない場合に呼び出される。 サービスの実装には通常、このルーティンは必要ない。
 
 void
 svcerr_progvers(xprt)
 SVCXPRT *xprt;
 
RPC パッケージに要求されたバージョンのプログラムが登録されていない場合に 呼び出される。サービスの実装には通常、このルーティンは必要ない。
 
 void
 svcerr_systemerr(xprt)
 SVCXPRT *xprt;
 
特定のプロトコルによってカバーされていなシステム・エラーが 検出された場合にサービス配分ルーティンによって呼び出される。 例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には このルーティンが呼び出されるかもしれない。
 
 void
 svcerr_weakauth(xprt)
 SVCXPRT *xprt;
 
認証パラメータが足りないためにリモート・プロシジャ・コールの実行を 拒否された場合にサービス配分ルーティンによって呼び出される。 このルーティンは svcerr_auth(xprt, AUTH_TOOWEAK) を呼び出す。
 
 SVCXPRT *
 svcfd_create(fd, sendsize, recvsize)
 int fd;
 u_int sendsize;
 u_int recvsize;
 
任意のオープンされたディスクリプター上にサービスを作成する。 典型的に、ディスクリプターは TCP のようなストリーム・プロトコルで接続されたソケットである。 sendsizerecvsize には送信バッファと受信バッファの大きさを指定する。もしゼロが指定された 場合は適切なデフォルトが選択される。
 
 SVCXPRT *
 svcraw_create()
 
このルーティンは擬似 RPC サービス通信を生成して、そのポインターを返す。 通信は実際にはそのプロセスのアドレス空間にあるバッファなので 対応する RPC クライアントは同じアドレス空間にいる必要がある。 clntraw_create() を参照すること。 このルーティンで RPC のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの RPC オーバヘッドを取得ができる。このルーティンは失敗した場合は NULL を返す。
 
 SVCXPRT *
 svctcp_create(sock, send_buf_size, recv_buf_size)
 int sock;
 u_int send_buf_size, recv_buf_size;
 
このルーティンは TCP/IP に基づく RPC サービス通信を作成し、それへのポインターを返す。 通信はソケット sock に結びつけられる。 sockRPC_ANYSOCK でも良い。この場合は新しいソケットが作成される。 もしソケットがローカルな TCP ポートに bind されていない場合は、このルーティンが適当なポートに bind する。補完された場合、xprt->xp_sock には通信のソケット・ ディスクリプターが、xprt->xp_port には通信のポート番号が 設定される。 このルーティンは失敗した場合は NULL を返す。 TCP に基づいた RPC はバッファされた I/O を使用するため、ユーザはバッファの大きさを指定できる。 ゼロを指定した場合は適切なデフォルトが選択される。
 
 SVCXPRT *
 svcudp_bufcreate(sock, sendsize, recosize)
 int sock;
 
このルーティンは UDP/IP に基づいた RPC サービス通信を作成し、そのポインターを返す。 通信はソケット sock に関連付けられる。 sockRPC_ANYSOCK でも良い。この場合は新しいソケットが作成される。 ソケットがローカルの UDP ポートに bind されていない場合にはこのルーティンは適当なポートに bind する。補完された場合、xprt->xp_sock に通信のソケットの ディスクリプターが、xprt->xp_port に通信のポート番号が 設定される。このルーティンは失敗した場合には NULL を返す。
これによりユーザは UDP に基づいた RPC メッセージで使用できる送信パケットおよび受信パケットの最大サイズを指定できる。
 
 SVCXPRT *
 svcudp_create(sock)
 int sock;
 
送信パケットと受信パケットのサイズを同じデフォルトの値 SZ に指定した svcudp_bufcreate(sock,SZ,SZ) と等価である。
 
 xdr_accepted_reply(xdrs, ar)
 XDR *xdrs;
 struct accepted_reply *ar;
 
RPC 応答メッセージをエンコードするのに使用する。このルーティンは RPC パッケージを用いずに RPC-形式 のメッセージを作成しようとする場合に便利である。
 
 xdr_authunix_parms(xdrs, aupp)
 XDR *xdrs;
 struct authunix_parms *aupp;
 
UNIX 形式の証明書を記述するために使用する。このルーティンは RPC 認証パッケージを使用せずにこれらの証明書を作成しようとする場合に 便利である。
 
 void
 xdr_callhdr(xdrs, chdr)
 XDR *xdrs;
 struct rpc_msg *chdr;
 
RPC 呼び出しのヘッダー・メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに RPC-形式 のメッセージを作成しようとする場合に便利である。
 
 xdr_callmsg(xdrs, cmsg)
 XDR *xdrs;
 struct rpc_msg *cmsg;
 
RPC 呼び出しメッセージを記述するのに使用する。 このルーティンは RPC パッケージを使用せずに RPC-形式 のメッセージを作成しようとする場合に便利である。
 
 xdr_opaque_auth(xdrs, ap)
 XDR *xdrs;
 struct opaque_auth *ap;
 
PRC 認証情報メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに RPC-形式 のメッセージを作成しようとする場合に便利である。
 
 xdr_pmap(xdrs, regs)
 XDR *xdrs;
 struct pmap *regs;
 
各種の portmap プロシジャへのパラメーターを外部的に記述するために使用する。 このルーティンは pmap インターフェースを使用せずに、これらのパラメーターを 作成したい場合に便利である。
 
 xdr_pmaplist(xdrs, rp)
 XDR *xdrs;
 struct pmaplist **rp;
 
ポートのマッピングのリストを外部的に記述するために使用する。 このルーティンは pmap インターフェースを使用せずに、これらのパラメーターを 作成したい場合に便利である。
 
 xdr_rejected_reply(xdrs, rr)
 XDR *xdrs;
 struct rejected_reply *rr;
 
RPC 応答メッセージを記述するために使用する。このルーティンは RPC パッケージを使用せずに、 RPC-形式 のメッセージを作成したい場合に便利である。
 
 xdr_replymsg(xdrs, rmsg)
 XDR *xdrs;
 struct rpc_msg *rmsg;
 
RPC 応答メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに、 RPC 形式のメッセージを作成したい場合に便利である。
 
 void
 xprt_register(xprt)
 SVCXPRT *xprt;
 
RPC サービス通信ハンドルを生成した後に、それら自身を RPC サービス・パッケージに登録する必要がある。 このルーティンは大域変数 svc_fds() を修正する。サービスの実装者は通常、このルーティンは必要ない。
 
 void
 xprt_unregister(xprt)
 SVCXPRT *xprt;
 
RPC サービス通信ハンドルを破壊する前に、それを RPC 通信パッケージから登録解除する必要がある。 このルーティンは大域変数 svc_fds() を修正する。サービスの実装者は通常、このルーティンは必要ない。

関連項目

xdr(3)
以下のマニュアル:
Remote Procedure Calls: Protocol Specification
Remote Procedure Call Programming Guide
rpcgen Programming Guide
RPC: Remote Procedure Call Protocol Specification, RFC 1050, Sun Microsystems, Inc., USC-ISI.