書式と説明
これらのルーティンは
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_spcreaterror() とは違って
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
がパラメーターへのポインターを持って呼び出される。
progname
は静的な結果へのポインターを返す必要がある。
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
を修正する。サービスの実装者は通常、このルーティンは必要ない。