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

名前

       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 である。 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(),  │ 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)