RPC(3)

名称
rpc - リモートプロシージャコール用ライブラリルーチン

ライブラリ
libc

書式
<rpc/rpc.h>

関数の説明については 解説 を参照してください。

解説
このルーチンでは、C プログラムを使用して、 ネットワークを通して別のマシンでプロシージャ呼び出しを実行できます。 まずクライアントがプロシージャを呼び出し、 データパケットをサーバに送信します。 パケットを受け取ったサーバは、ディスパッチルーチンを呼び出し、 要求されたサービスを実行してから応答を送り返します。 最後に、プロシージャ呼び出しがクライアントに戻ります。

Secure RPC (DES 認証) に使用するルーチンについては、 rpc_secure(3) で説明します。 Secure RPC は DES 暗号化が使用できる場合にのみ使用できます。

    void
    auth_destroy(AUTH *auth)

    auth に関連する認証情報を破壊するマクロです。 一般的に、破壊にはプライベートデータ構造の解放も含まれます。 auth_destroy() を呼び出した後で auth を使用した結果は不定になります。

    AUTH *
    authnone_create()

    各リモートプロシージャコールで使用できない認証情報を渡す RPC 認証ハンドルを作成して戻します。 RPC は、この認証をデフォルトで使用します。

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

    認証情報を含む RPC UNIX 認証ハンドルを作成して戻します。 パラメータ host は、情報を作成するマシンの名前です。 uid は、ユーザのユーザ ID です。 gid は、ユーザの現行グループ ID です。 len と aup_gids は、ユーザが属するグループの配列を表します。 あるユーザになりすますことが容易です。

    AUTH *
    authunix_create_default()

    適切なパラメータで authunix_create() を呼び出します。

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

    マシン host で prognum, versnum, procnum に関連するリモートプロシージャを呼び出します。 パラメータ in は、プロシージャの引数アドレスで、 out は結果を配置するアドレスです。 inproc は、プロシージャのパラメータをデコードするために使用し、 outproc は、プロシージャの結果をデコードするために使用します。 このルーチンは、問題がなければ 0 を戻し、 問題がある場合は、 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() は次の応答を待ちます。 0 を戻さない場合は、適切なステータスで戻ります。

    警告: ブロードキャストソケットのサイズは、 データリンクの最大転送単位に制限されています。 イーサネットの場合、この値は 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_destroy() を呼び出した後で clnt を使用した結果は不定になります。 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 | get server's address

    以下のオペレーションは UDP のみで有効です。
    CLSET_RETRY_TIMEOUT |
    struct timeval | 再試行タイムアウトの設定
    CLGET_RETRY_TIMEOUT |
    struct timeval | 再試行タイムアウトの入手
    CLSET_CONNECT | int | connect(2)
    を使用

    再試行タイムアウトは、サーバが応答してから要求を再送することを UDP RPC が待機する時間です。

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

    RPC/XDR システムが RPC 呼び出しの結果をデコードする場合に割り振ったデータを解放するマクロです。 パラメータ 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 呼び出しがエラーになった理由を示すメッセージを標準エラーに送信する代わりに、 メッセージを含む文字列のポインタを戻します。 文字列は改行 (‘\n’) で終わります。

    プログラムに標準エラーがない場合 (サーバとして実行しているプログラムには標準エラーがないことが多い)、 またはメッセージを printf() で出力する必要がない場合、 あるいは clnt_perrno() がサポートするもの以外のメッセージフォーマットを使用する場合は、 clnt_perrno() の代わりに clnt_sperrno() を使用します。

    注意: clnt_sperror() と clnt_spcreaterror() とは異なり、 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 である場合は、 リモートプログラムが注意を向ける実際のポートに設定されます ( portmap(8) サービスはこの情報で調べられます)。 パラメータ sockp はソケットです。このパラメータが RPC_ANYSOCK である場合、このルーチンは新しいソケットを開いて sockp を設定します。 TCP ベースの RPC はバッファによる I/O を使用するので、ユーザはパラメータ sendsz と recvsz で送信バッファと受信バッファのサイズを指定できます。 値を 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 である場合は、 リモートプログラムが注意を向ける実際のポートに設定されます (リモート portmap(8) サービスは、この情報で調べられます)。 パラメータ sockp はソケットです。 このパラメータが RPC_ANYSOCK である場合、このルーチンは新しいソケットを開いて sockp を設定します。 UDP トランスポートは、応答を受け取るまで、 または呼び出しがタイムアウトになるまで、 wait 時間間隔で呼び出しメッセージを再送信します。 呼び出しがタイムアウトとなる時間は、 で指定します。

    警告: 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 である場合は、 リモートプログラムが注意を向ける実際のポートに設定されます (リモート portmap(8) サービスは、この情報で調べられます)。 パラメータ sockp はソケットです。このパラメータが RPC_ANYSOCK である場合、このルーチンは新しいソケットを開いて sockp を設定します。 UDP トランスポートは、応答を受け取るまで、 または呼び出しがタイムアウトになるまで wait 時間間隔で呼び出しメッセージを再送信します。 呼び出しがタイムアウトになる時間は、 clnt_call() で指定します。

    ユーザは、 UDP ベースの RPC メッセージの送受信を行う、最大パケットサイズを指定できます。

    int
    get_myaddress(struct sockaddr_in *addr)

    /etc/hosts を処理するライブラリルーチンを参考にせず、マシンの IP アドレスを addr に入れます。ポート番号は、常に htons(PMAPPORT) に設定されます。 問題がない場合は 0 を戻し、問題がある場合は 0 以外を戻します。

    struct pmaplist *
    pmap_getmaps(struct sockaddr_in *addr)

    portmap(8) サービスのユーザインタフェースで、 IP アドレス addr にあるホストの RPC プログラムとポートの現行のマッピングのリストを戻します。 このルーチンは NULL を戻すことがあります。 コマンド “rpcinfo -p” はこのルーチンを使用します。

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

    portmap(8) サービスのユーザインタフェースで、 プログラム番号 prognum バージョン versnum をサポートするサービスを待ち、 protocol に関連する転送プロトコルを表すポート番号を戻します。 protocol の値は、ほとんどの場合 IPPROTO_UDP か IPPROTO_TCP です。マッピングが存在しない場合、または RPC システムがリモート portmap(8) サービスと接触できない場合、戻り値は 0 になります。 後者の場合、 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)

    portmap(8) サービスのユーザインタフェースで、 IP アドレス addr のホストのプロシージャを RPC 呼び出しにするように、そのホストの portmap(8) に命令します。 プロシージャで問題が発生しない場合、パラメータ portp はプログラムのポート番号に修正されます。 その他のパラメータについては、 callrpc() と clnt_call() を参照してください。 このプロシージャは、 “ping” 以外で使用することはありません。 clnt_broadcast() も参照してください。

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

    portmap(8) サービスのユーザインタフェースで、 (prognum, versnum, protocol) の 3 つ、およびマシンの portmap(8) サービスでの port の間にマッピングを確立します。 protocol の値は、ほとんどの場合 IPPROTO_UDP か IPPROTO_TCP. です。 このルーチンは問題がないと 1 を戻し、問題がある場合は 0 を戻します。 これは、 svc_register() で自動的に実行されます。

    bool_t pmap_unset(u_long prognum, u_long versnum)

    portmap(8) サービスのユーザインタフェースで、 (prognum, versnum, *) の 3 つ、および portmap(8) サービスでの port の間に存在するマッピングをすべて破壊します。 このルーチンは、問題がなければ 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)

    RPC/XDR システムが svc_getargs() を使用して引数をサービスプロシージャにデコードした場合に 割り振ったデータを解放するマクロです。 このルーチンは、結果が問題なく解放されると 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)

    prognum と versnum をサービスディスパッチプロシージャ dispatch() に関連付けます。 protocol が 0 である場合、サービスは portmap(8) サービスで登録されません。 protocol が 0 以外である場合、 (prognum, versnum, protocol) の 3 つと xprt->xp_port のマッピングがローカル portmap(8) サービスで確立されます (一般的に protocol は 0 か IPPROTO_UDP か IPPROTO_TCP です)。 プロシージャ dispatch() の形式は以下の通りです。

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

    svc_register() ルーチンは、問題がなければ 1 を戻し、問題がある場合は 0 を戻します。

    svc_run()

    このルーチンは戻りません。 RPC 要求の到着を待ち、到着すると 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)

    (prognum, versnum) の 2 つとディスパッチルーチンのマッピング、および (prognum, versnum, *) の 3 つとポート番号のマッチングをすべて削除します。

    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 サービストランスポートを作成します。 トランスポートにはソケット sock が関連します。ソケットが RPC_ANYSOCK である場合は、新しいソケットが作成されます。 ソケットがローカル TCP ポートに結合していない場合、 このルーチンはソケットを任意のポートに結合します。処理が終わると、 xprt->xp_sock はトランスポートのソケット記述子になり、 xprt->xp_port はトランスポートのポート番号になります。 このルーチンは、エラーが発生すると NULL を戻します。 TCP ベースの RPC はバッファによる I/O を使用するので、ユーザはバッファサイズを指定できます。 値を 0 にすると、適切なデフォルトが選択されます。

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

    開いている記述子の最上位にサービスを作成します。 一般的にこの記述子は、 TCP などのストリームプロトコルの接続済みソケットです。 sendsize と recvsize は、送信バッファと受信バッファのサイズを指定します。 このサイズが 0 である場合は、適切なデフォルトが選択されます。

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

    ポインタを戻す UDP/IP ベースの RPC サービストランスポートを作成します。 トランスポートにはソケット sock が関連します。ソケットが RPC_ANYSOCK である場合は、新しいソケットが作成されます。 ソケットがローカル UDP ポートに結合していない場合、 このルーチンはソケットを任意のポートに結合します。 処理が終わると、 xprt->xp_sock はトランスポートのソケット記述子になり、 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)

    さまざまな portmap(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, RFC1050, Sun Microsystems, Inc., USC-ISI.