Scroll to navigation

RPC(3) Linux Programmer's Manual RPC(3)

名前

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

書式と説明

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

これらのルーティンを使用するには、ヘッダーファイル <rpc/rpc.h> をインクルードすること。

下記のプロトタイプでは次の型を使用している。

typedef int bool_t;
typedef bool_t (*xdrproc_t) (XDR *, void *, ...);
typedef bool_t (*resultproc_t) (caddr_t resp,
                                struct sockaddr_in *raddr);

AUTH, CLIENT, SVCXPRT, XDR の宣言についてはヘッダーファイルを参照。

void auth_destroy(AUTH *auth);
このマクロは auth に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の 破棄を含んでいる。 auth_destroy() を呼び出した後に auth を使用することは未定義である。

AUTH *authnone_create(void);
各リモートプロシージャーコールで使用できない仮の認証情報として渡される RPC 認証ハンドルを作成して返す。 これは RPC で使用されるデフォルトの認証である。

AUTH *authunix_create(char *host, int uid, int gid,
                      int len, int *aup_gids);
認証情報を含んだ RPC 認証ハンドルを作成して返す。 host パラメーターは情報が作成されたマシンの名前である。 uid はそのユーザーのユーザー IDgid はそのユーザーの現在のグループ ID である。 lenaup_gids はそのユーザーが所属するグループの配列を参照している。 他のユーザーになりすますことは簡単である。

AUTH *authunix_create_default(void);
適切なパラメーターで authunix_create() を呼び出す。

int callrpc(char *host, unsigned long prognum,
            unsigned long versnum, unsigned long procnum,
            xdrproc_t inproc, char *in,
            xdrproc_t outproc, char *out);
マシン host 上で prognum, versnum, procnum に関連付けられたリモートプロシージャーを呼び出す。 パラメーター in はプロシージャーの引数のアドレスであり out は結果を格納するアドレスである。 inproc はプロシージャーのパラメーターをエンコードするのに使用され、 outproc は結果をデコードするのに使用される。 このルーティンは成功した場合にはゼロを返す。失敗した場合には enum clnt_stat を整数にキャストした値を返す。 clnt_perrno() ルーティンが失敗の状態をメッセージに変換するのに使用できる。
警告: このルーティンでリモートプロシージャーを呼び出すと通信には UDP/IP が使用される。この際の制限については clntudp_create() を参照すること。このルーティンを使用して認証や時間切れの制御を することはできない。

enum clnt_stat clnt_broadcast(unsigned long prognum,
                     unsigned long versnum, unsigned long procnum,
                     xdrproc_t inproc, char *in,
                     xdrproc_t outproc, char *out,
                     resultproc_t eachresult);
callrpc() と同様であるが、メッセージがローカルのブロードキャストネットワーク 全体へとブロードキャストされる点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult() を呼び出す。

eachresult(char *out, struct sockaddr_in *addr);
    

ここで outclnt_broadcast() に渡される out と同じであるが、リモートプロシージャーからの出力がデコードされている 点のみが異っている。 addr は結果を送って来たマシンのアドレスを指している。 eachresult() がゼロを返した場合、 clnt_broadcast() はさらなる回答を待つ。そうでなければ適切な状態で終了する。
警告: ブロードキャストソケットはデータリンク層の最大転送単位に 制限されている。イーサネットの場合、最大値は 1500 バイトである。

enum clnt_stat clnt_call(CLIENT *clnt, unsigned long procnum,
                    xdrproc_t inproc, char *in,
                    xdrproc_t outproc, char *out,
                    struct timeval tout);
このマクロはクライアントハンドル clnt に関連付けられた procnum リモートプロシージャーを呼び出す。 クライアントハンドルは clnt_create() のような RPC クライアント作成ルーティンによって得られる。 パタメータ in はプロシージャーの引数のアドレスである。 out はプロシージャーの返り値を格納するアドレスである。 inproc はプロシージャーのパラメーターをエンコードするのに使用される。 outproc はプロシージャーの返り値をデコードするのに使用される。 tout は結果が返されるのを待つ時間である。

clnt_destroy(CLIENT *clnt);
このマクロはクライアントの RPC ハンドルを破壊する。破壊には通常は clnt 自身も含めて私的なデータ構造体の破棄が含まれている。 clnt_destroy() の呼び出しの後に clnt を使用することは未定義である。 RPC ライブラリが関連するソケットをオープンした場合には、 それも閉じられる。それ以外の場合にはソケットはオープンされたままである。

CLIENT *clnt_create(char *host, unsigned long prog,
                    unsigned long vers, char *proto);
一般的なクライアントの作成ルーティンである。 host はサーバのあるリモートホストの名前を指定する。 proto どのような通信プロトコルを使用するかを指定する。現在ここに 使用できる値は “udp” と “tcp” である。 デフォルトの時間切れが設定されるが、 clnt_control() を使用して変更可能である。
警告: UDP を使用した場合には欠点がある。 UDP に基づいた RPC メッセージは 最大でも 8 KByte のエンコードデータしか保持する ことができないため、大きな引数や巨大な結果を取るプロシージャーに は使用することができない。

bool_t clnt_control(CLIENT *cl, 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" がサーバの回答を待つ時間である。

clnt_freeres(CLIENT * clnt, xdrproc_t outproc, char *out);
このマクロは RPC 呼び出しの結果のデコードの際に RPC/XDR システムによって割当てられたデータを解放する。 パラメーター out は結果のアドレスである。 outproc は結果を記述している XDR ルーティンである。 このルーティンは結果の解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。

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() の後に使用すること。

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 呼び出しが失敗したかについてのメッセージを標準エラー出力に表示する かわりに、メッセージを格納している文字列へのポインターを返す。 文字列は NEWLINE(改行) で終っている。
clnt_sperrno() はプログラムが標準エラー出力を持っていない場合(プログラムがサーバとし て走っている場合にはよくありえる)や、プログラマーがメッセージを printf(3) で出力することを望まない場合や、メッセージの形式が clnt_perrno() がサポートするものとは異っている場合などに clnt_perrno() のかわりに使用される。 注意: clnt_sperror() や clnt_spcreateerror() とは違って clnt_sperrno() は静的データへのポインターを返す。しかし呼び出しごとに上書きされることはない。

char *clnt_sperror(CLIENT *rpch, char *s);
clnt_perror() と同様であるが、標準エラー出力に表示する代りに (clnt_sperrno() のように) 文字列へのポインターを返す点が異っている。
バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。

CLIENT *clntraw_create(unsigned long prognum, unsigned long versnum);
このルーティンはリモートプログラム prognum、 バージョン versnum のための擬似 RPC クライアントを作成する。メッセージをサービスに渡すために使用する 通信は実際にはそのプロセスのアドレス空間にあるバッファーである。 それで、対応する RPC サーバが同じアドレス空間の中にいなければならない。 svcraw_create() を参照すること。 これにより RPC のシミュレーションや、カーネルインターフェースに影響されずに 応答時間などの RPC オーバヘッドの獲得ができる。 失敗した場合にはこのルーティンは NULL を返す。

CLIENT *clnttcp_create(struct sockaddr_in *addr,
                unsigned long prognum, unsigned long versnum,
                int *sockp, unsigned int sendsz, unsigned int 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(struct sockaddr_in *addr,
                unsigned long prognum, unsigned long 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(struct sockaddr_in *addr,
            unsigned long prognum, unsigned long 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(struct sockaddr_in *addr);
このマシンの IP アドレスを *addr に格納する。 /etc/hosts を扱うライブラリルーティンは使用しない。ポート番号は常に htons(PMAPPORT) に設定される。

struct pmaplist *pmap_getmaps(struct sockaddr_in *addr);
portmap サービスのためのユーザーインターフェースであり、 IP アドレス *addr にあるホストの現在の RPC プログラムからポート番号へのマッピングの一覧を返す。 このルーティンが NULL を返す場合もある。 `rpcinfo -p' コマンドはこのルーティンを使用している。

unsigned short pmap_getport(struct sockaddr_in *addr,
                    unsigned long prognum, unsigned long versnum,
                    unsigned int protocol);
portmap サービスのためのユーザーインターフェースで、 プログラム番号 prognum、 バージョン versnum、 関連付けられた通信プロトコル protocol をサポートするサービスが待っているポート番号を返す。 protocol の値はほとんどの場合 IPPROTO_UDP か IPPROTO_TCP である。 返り値ゼロはマッピングが存在しないか、 RPC システムがリモートの portmap サービスの参照に失敗したことを意味する。後者の場合は大域変数 rpc_createerr が RPC 状態を保持している。

enum clnt_stat pmap_rmtcall(struct sockaddr_in *addr,
                    unsigned long prognum, unsigned long versnum,
                    unsigned long procnum,
                    xdrproc_t inproc, char *in,
                    xdrproc_t outproc, char *out,
                    struct timeval tout, unsigned long *portp);
portmap サービスのためのユーザーインターフェースで、 IP アドレス *addr のホストの portmap を参照して、 RPC 呼び出しを生成し、そのホスト上のプロシージャーを呼び出す。 パラメーター *portp はプロシージャーが成功した場合にはプログラムのポート番号に修正される。 他のパラメーターの定義については callrpc() や clnt_call() で説明してある。 このプロシージャーは “ping” のみに使用すべきである。 clnt_broadcast() も参照すること。

bool_t pmap_set(unsigned long prognum, unsigned long versnum,
                unsigned int protocol, unsigned short port);
portmap サービスのためのユーザーインターフェースで、 [prognum,versnum,protocol] の組み合わせと port との間のマッピングを、そのマシン上の portmap サービスに登録する。 protocol はほとんどの場合 IPPROTO_UDPIPPROTO_TCP のどちらかである。 このルーティンは成功した場合には 1 を返す。失敗した場合にはゼロを返す。 svc_register() によって自動的に実行される。

bool_t pmap_unset(unsigned long prognum, unsigned long versnum);
portmap サービスのためのユーザーインターフェースで、 [prognum,versnum,*] の組み合わせと ports の間のマッピングをそのマシン上の portmap サービスから削除する。このルーティンは成功した場合は 1 を返す。 失敗した場合には 0 を返す。

int registerrpc(unsigned long prognum, unsigned long versnum,
                unsigned long procnum, char *(*procname)(char *),
                xdrproc_t inproc, xdrproc_t outproc);
RPC サービスパッケージを使用して procname プロシージャーを登録する。プログラム prognum、 バージョン versnum、 プロシージャー procnum への要求が届いた場合、 procname がパラメーターへのポインターを持って呼び出される。 procname は静的な結果へのポインターを返す必要がある。 inproc はパラメーターをデコードするために使用される。 outproc は結果をエンコードするために使用される。 このルーティンは登録に成功した場合にはゼロを返す。 失敗した場合には -1 を返す。
警告: この形式で登録されたリモートプロシージャーは UDP/IP 通信を使用する。制限に関しては svcudp_create() を参照すること。

struct rpc_createerr rpc_createerr;
成功しなかった RPC クライアント生成ルーティンによって設定される大域変数。 clnt_pcreateerror() ルーティンが理由を表示するために使用する。

void svc_destroy(SVCXPRT *xprt);
このマクロは通信ハンドル xprt の RPC サービスを破壊する。破壊には通常、 xprt を含めて、私的なデータ構造体の破棄が含まれている。 このルーティンを呼び出した後に xprt を使用することは未定義である。

fd_set svc_fdset;
RPC サービス側のファイルディスクリプターのビットマスクを反映した大域変数。 select(2) システムコールのパラメーターのために利用できる。これは、サービスの実装者が svc_run() を呼び出さずに、独自の非同期イベント処理を用いる場合にのみ意味がある。 この変数は読み込み専用で (そのまま select(2) へ渡してはならない!)、 svc_getreqset() 呼び出しや生成ルーティンの後に変更されているかもしれない。

int svc_fds;
svc_fdset に似ているが、32 ファイルディスクリプターに制限されている。 このインターフェースは svc_fdset によって置き換えられた。

svc_freeargs(SVCXPRT *xprt, xdrproc_t inproc, char *in);
このマクロはサービスプロシージャーが svc_getargs() を使用して引数をデコードした時に RPC/XDR システムによって割り当てられたデータを解放する。 このルーティンは解放に成功した場合には 1 を返す。 失敗した場合にはゼロを返す。

svc_getargs(SVCXPRT *xprt, xdrproc_t inproc, char *in);
このマクロは RPC サービス通信ハンドル xprt に関連付けられた RPC 要求の引数をデコードする。パラメーター in は引数の格納されたアドレスである。 inproc は引数をデコードするための XDR ルーティンである。 このルーティンはデコードに成功した場合は 1 を返す。 失敗した場合はゼロを返す。

struct sockaddr_in *svc_getcaller(SVCXPRT *xprt);
RPC サービス通信ハンドル xprt に関連付けられたプロシージャーの呼び出し元のネットワークアドレスを 取得するための標準的な手段。

void svc_getreqset(fd_set *rdfds);
このルーティンはサービスの実装者が svc_run() を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。 これは select(2) システムコールが RPC ソケットに RPC 要求が到着したと返した場合にのみ呼び出される。 rdfds は結果の読み込みファイルディスクリプターのビットマスクである。 このルーティンは rdfds の値に関連付けられた全てのソケットのサービスが行なわれた時に 返ってくる。

void svc_getreq(int rdfds);
svc_getreqset() に似ているが、ファイルディスクリプターの数が 32 に制限されている。 このインターフェースは svc_getreqset() によって置き換えられた。

bool_t svc_register(SVCXPRT *xprt, unsigned long prognum,
                    unsigned long versnum,
                    void (*dispatch)(svc_req *, SVCXPRT *),
                    unsigned long protocol);
prognumversnum をサービス配分プロシージャー dispatch で関連付ける。 protocol がゼロの場合、サービスは portmap サービスには登録されない。 protocol がゼロ以外の場合、 [prognum,versnum,protocol] の組み合わせと xprt->xp_port とのマッピングがローカルの portmap サービスに登録される。(一般的に protocol はゼロ、 IPPROTO_UDPIPPROTO_TCP のどれかである。) プロシージャー dispatch は以下の形式である:

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

svc_register() ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。

void svc_run(void);
このルーティンは戻ってこない。これは RPC 要求の到着を待ち、どれかが届いた場合に svc_getreq() を使用して適切なサービスプロシージャーを呼び出す。 このプロシージャーは通常は select(2) システムコールから返るのを待っている。

bool_t svc_sendreply(SVCXPRT *xprt, xdrproc_t outproc, char *out);
RPC サービス配分ルーティンによってリモートプロシージャーコールの結果を 返すために呼び出される。 パラメーター xprt はその要求に関連付けられた通信ハンドルである。 outproc は結果をエンコードするために使用する XDR ルーティンである。 out は結果のアドレスである。このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。

void svc_unregister(unsigned long prognum, unsigned long versnum);
配分ルーティンから [prognum,versnum] および [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);
RPC パッケージに要求されたバージョンのプログラムが登録されていない場合に 呼び出される。サービスの実装には通常、このルーティンは必要ない。

void svcerr_systemerr(SVCXPRT *xprt);
特定のプロトコルによってカバーされていなシステムエラーが 検出された場合にサービス配分ルーティンによって呼び出される。 例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には このルーティンが呼び出されるかもしれない。

void svcerr_weakauth(SVCXPRT *xprt);
認証パラメーターが足りないためにリモートプロシージャーコールの実行を 拒否された場合にサービス配分ルーティンによって呼び出される。 このルーティンは svcerr_auth(xprt, AUTH_TOOWEAK) を呼び出す。

SVCXPRT *svcfd_create(int fd, unsigned int sendsize,
                      unsigned int recvsize);
任意のオープンされたファイルディスクリプター上にサービスを作成する。 典型的に、ファイルディスクリプターは TCP のようなストリームプロトコルで接続されたソケットである。 sendsizerecvsize には送信バッファーと受信バッファーの大きさを指定する。もしゼロが指定された 場合は適切なデフォルトが選択される。

SVCXPRT *svcraw_create(void);
このルーティンは擬似 RPC サービス通信を生成して、そのポインターを返す。 通信は実際にはそのプロセスのアドレス空間にあるバッファーなので 対応する RPC クライアントは同じアドレス空間にいる必要がある。 clntraw_create() を参照すること。 このルーティンで RPC のシミュレーションや、カーネルインターフェースに影響されずに応答時間などの RPC オーバヘッドを取得ができる。このルーティンは失敗した場合は NULL を返す。

SVCXPRT *svctcp_create(int sock, unsigned int send_buf_size,
                       unsigned int 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(int sock, unsigned int sendsize,
                          unsigned int recosize);
このルーティンは UDP/IP に基づいた RPC サービス通信を作成し、 そのポインターを返す。通信はソケット sock に関連付けられる。 sockRPC_ANYSOCK でも良い。この場合は新しいソケットが作成される。 ソケットがローカルの UDP ポートに bind されていない場合には このルーティンは適当なポートに bind する。 補完された場合、xprt->xp_sock に通信のソケットの ディスクリプターが、xprt->xp_port に通信のポート番号が 設定される。このルーティンは失敗した場合には NULL を返す。
これを使用すると UDP に基づいた RPC メッセージにおいて送信パケットや 受信パケットの最大サイズを指定することが可能になる。

SVCXPRT *svcudp_create(int sock);
送信パケットと受信パケットのサイズを同じデフォルトの値 SZ に指定した svcudp_bufcreate(sock,SZ,SZ) と等価である。

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 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);
PRC 認証情報メッセージを記述するために使用する。 このルーティンは RPC パッケージを使用せずに RPC-形式のメッセージを作成しようとする場合に便利である。

bool_t xdr_pmap(XDR *xdrs, struct pmap *regs);
各種の portmap プロシージャーへのパラメーターを外部的に記述するために使用する。 このルーティンは 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 を修正する。サービスの実装者は通常、このルーティンは必要ない。

属性

この節で使用されている用語の説明については、 attributes(7) を参照。

インターフェース 属性
auth_destroy(), authnone_create(), authunix_create(), authunix_create_default(), callrpc(), clnt_broadcast(), clnt_call(), clnt_destroy(), clnt_create(), clnt_control(), clnt_freeres(), clnt_geterr(), clnt_pcreateerror(), clnt_perrno(), clnt_perror(), clnt_spcreateerror(), clnt_sperrno(), clnt_sperror(), clntraw_create(), clnttcp_create(), clntudp_create(), clntudp_bufcreate(), get_myaddress(), pmap_getmaps(), pmap_getport(), pmap_rmtcall(), pmap_set(), pmap_unset(), registerrpc(), svc_destroy(), svc_freeargs(), svc_getargs(), svc_getcaller(), svc_getreqset(), svc_getreq(), svc_register(), svc_run(), svc_sendreply(), svc_unregister(), svcerr_auth(), svcerr_decode(), svcerr_noproc(), svcerr_noprog(), svcerr_progvers(), svcerr_systemerr(), svcerr_weakauth(), svcfd_create(), svcraw_create(), svctcp_create(), svcudp_bufcreate(), svcudp_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() Thread safety MT-Safe

関連項目

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.

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

2020-11-01