Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all 

名前
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 はそのユーザーのユーザー ID 、 gid はそのユーザーの現在のグループ ID である。 len と
aup_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);
ここで out は clnt_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 を使用するため、ユーザーはパラメー
ター sendsz と recvsz を使用して送信バッファーと受信バッファーのサイズを指定することができる。 ゼ
ロを指定した場合には適切なデフォルトが選択される。 このルーティンは失敗した場合は 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_UDP か IPPROTO_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);
prognum と versnum をサービス配分プロシージャー dispatch で関連付ける。 protocol がゼロの場
合、サービスは portmap サービスには登録されない。 protocol がゼロ以外の場合、
[prognum,versnum,protocol] の組み合わせと xprt->xp_port とのマッピングがローカルの portmap サービ
スに登録される。(一般的に protocol はゼロ、 IPPROTO_UDP、 IPPROTO_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 のようなストリームプロトコルで接続されたソケットである。 sendsize と recvsize には送
信バッファーと受信バッファーの大きさを指定する。もしゼロが指定された 場合は適切なデフォルトが選択
される。
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 に結びつけられる。 sock は RPC_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 に関連付けられる。 sock は RPC_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(), │ Thread safety │ MT-Safe │
│ 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() │ │ │
└─────────────────────────────────────┴───────────────┴─────────┘
関連項目
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 RPC(3)