RPC
Section: Linux Programmer's Manual (3)
Updated: 2007-05-18
Index
JM Home Page
roff page
名前
rpc - 遠隔手続き呼び出し(RPC)のためのライブラリ・ルーティン
書式と説明
これらのルーティンは C プログラムでネットワークを通して
他のマシンにアクセスするプロシジャを作成することを可能にする。
最初にクライアントはデータパケットをサーバに送るために
プロシジャを呼び出す。
サーバはパケットを受け取ると、配分ルーチンを呼び出して
要求されたサービスに実行し、返答を送り返す。
最後にプロシジャ・コールはクライアントへと戻る。
#include <rpc/rpc.h>
void
auth_destroy(auth)
AUTH *auth;
-
このマクロは
auth
に関連付けられた認証情報を破壊する。破壊は通常は私的なデータ構造の
破棄を含んでいる。
auth_destroy()
を呼び出した後に
auth
を使用することは未定義である。
AUTH *
authnone_create()
-
各リモート・プロシジャ・コールで使用できない仮の認証情報として渡される
RPC
認証ハンドルを作成して返す。これは
RPC
で使用されるデフォルトの認証である。
AUTH *
authunix_create(host, uid, gid, len, aup_gids)
char *host;
int uid, gid, len, *aup.gids;
-
認証情報を含んだ
RPC
認証ハンドルを作成して返す。
host
パラメーターは情報が作成されたマシンの名前である。
uid
はそのユーザのユーザ
ID
、
gid
はそのユーザの現在のグループ
ID
である。
len
と
aup_gids
はそのユーザが所属するグループの配列を参照している。
他のユーザになりすますことは簡単である。
AUTH *
authunix_create_default()
-
適切なパラメーターで
authunix_create()
を呼び出す。
callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
char *host;
u_long prognum, versnum, procnum;
char *in, *out;
xdrproc_t inproc, outproc;
-
マシン
host
上で
prognum,
versnum,
procnum
に関連付けられたリモート・プロシジャを呼び出す。
パラメーター
in
はプロシジャの引き数のアドレスであり
out
は結果を格納するアドレスである。
inproc
はプロシジャのパラメーターをエンコードするのに使用され、
outproc
は結果をデコードするのに使用される。
このルーティンは成功した場合にはゼロを返す。失敗した場合には
enum clnt_stat
を整数にキャストした値を返す。
clnt_perrno()
ルーティンが失敗の状態をメッセージに変換するのに使用できる。
-
警告: このルーティンでリモート・プロシジャを呼び出すと通信には
UDP/IP
が使用される。この際の制限については
clntudp_create()
を参照すること。このルーティンを使用して認証や時間切れの制御を
することはできない。
enum clnt_stat
clnt_broadcast(prognum, versnum, procnum, inproc, in, outproc, out, eachresult)
u_long prognum, versnum, procnum;
char *in, *out;
xdrproc_t inproc, outproc;
resultproc_t eachresult;
-
callrpc()
と同様であるが、メッセージがローカルのブロードキャスト・ネットワーク
全体へとブロードキャストされる点が異っている。回答を受け取る度に
このルーティンは以下の形式の
eachresult()
を呼び出す。
-
-
eachresult(out, addr)
char *out;
struct sockaddr_in *addr;
-
ここで
out
は
clnt_broadcast()
に渡される
out
と同じであるが、リモート・プロシジャからの出力がデコードされている
点のみが異っている。
addr
は結果を送って来たマシンのアドレスを指している。
eachresult()
がゼロを返した場合、
clnt_broadcast()
はさらなる回答を待つ。そうでなければ適切な状態で終了する。
-
警告: ブロードキャスト・ソケットはデータリンク層の最大転送単位に
制限されている。イーサネットの場合、最大値は 1500 バイトである。
enum clnt_stat
clnt_call(clnt, procnum, inproc, in, outproc, out, tout)
CLIENT *clnt;
u_long
procnum;
xdrproc_t inproc, outproc;
char *in, *out;
struct timeval tout;
-
このマクロはクライアント・ハンドル
clnt
に関連付けられた
procnum
リモート・プロシジャを呼び出す。
クライアント・ハンドルは
clnt_create()
のような
RPC
クライアント作成ルーティンによって得られる。
パタメータ
in
はプロシジャの引き数のアドレスである。
out
はプロシジャの返り値を格納するアドレスである。
inproc
はプロシジャのパラメーターをエンコードするのに使用される。
outproc
はプロシジャの返り値をデコードするのに使用される。
tout
は結果が返されるのを待つ時間である。
clnt_destroy(clnt)
CLIENT *clnt;
-
このマクロはクライアントの
RPC
ハンドルを破壊する。破壊には通常は
clnt
自身も含めて私的なデータ構造体の破棄が含まれている。
clnt_destroy()
の呼び出しの後に
clnt
を使用することは未定義である。
RPC
ライブラリが関連するソケットをオープンした場合には、
それも閉じられる。それ以外の場合にはソケットはオープンされたままである。
CLIENT *
clnt_create(host, prog, vers, proto)
char *host;
u_long prog, vers;
char *proto;
-
一般的なクライアントの作成ルーティンである。
host
はサーバのあるリモートホストの名前を指定する。
proto
どのような通信プロトコルを使用するかを指定する。現在ここに
使用できる値は lqudprq と lqtcprq である。
デフォルトの時間切れが設定されるが、
clnt_control()
を使用して変更可能である。
-
警告:
UDP
を使用した場合には欠点がある。
UDP
に基づいた
RPC
メッセージは最大でも 8 KByte のエンコードデータしか保持する
ことができないため、大きな引き数や巨大な結果を取るプロシジャに
は使用することができない。
bool_t
clnt_control(cl, req, info)
CLIENT *cl;
char *info;
-
このマクロは各種クライアントについて情報を変更したり、取得したり
するのに使用する。
req
は操作の種類を指定する。
info
は情報へのポインターである。
UDP
と
TCP
どちらの場合も使用可能な
req
の値と、その引き数の型、およびその内容は以下の通りである:
-
CLSET_TIMEOUT struct timeval 時間切れを設定するCLGET_TIMEOUTstruct timeval時間切れを取得する
-
注意:
clnt_control()
を使用して時間切れを設定した場合にはそれ以後は
clnt_call()
に渡される時間切れパラメーターは全て無視される。
-
CLGET_SERVER_ADDR struct sockaddr_in サーバアドレスを取得する
-
以下の操作は
UDP
の場合にのみ有効である:
-
CLSET_RETRY_TIMEOUT struct timeval 再送間隔を設定するCLGET_RETRY_TIMEOUTstruct timeval再送間隔を取得する
-
再送間隔は次に要求を再送する前に
UDP RPC
がサーバの回答を待つ時間である。
clnt_freeres(clnt, outproc, out)
CLIENT *clnt;
xdrproc_t outproc;
char *out;
-
このマクロは
RPC
呼び出しの結果のデコードの際に
RPC/XDR
システムによって割当てられたデータを解放する。
パラメーター
out
は結果のアドレスである。
outproc
は結果を記述している
XDR
ルーティンである。このルーティンは結果の解放に成功した場合には 1 を返す。
失敗した場合にはゼロを返す。
void
clnt_geterr(clnt, errp)
CLIENT *clnt;
struct rpc_err *errp;
-
このマクロはクライアント・ハンドルのエラー構造体を
errp
アドレスで指定された構造体へコピーする。
void
clnt_pcreateerror(s)
char *s;
-
標準エラー出力に、なぜクライアント
RPC
ハンドルの作成ができなかったかについてのメッセージを表示する。
メッセージの前に文字列
s
とコロン(:)が表示される。
clnt_create(),
clntraw_create(),
clnttcp_create(),
clntudp_create()
の呼び出しが失敗した時に使用すること。
void
clnt_perrno(stat)
enum clnt_stat stat;
-
標準エラー出力に
stat
によって指示されるエラー状態に対応するメッセージを表示する。
callrpc()
の後に使用すること。
clnt_perror(clnt, s)
CLIENT *clnt;
char *s;
-
標準エラー出力に、なぜ
RPC
呼び出しが失敗したかについてのメッセージを表示する。
clnt
はコールに使用したハンドルである。
メッセージの前に文字列
s
とコロン(:)が表示される。
clnt_call()
が失敗した後に使用すること。
char *
clnt_spcreateerror
char *s;
-
clnt_pcreateerror()
と同様であるが、標準エラー出力へ表示するかわりに文字列を返す点が異っている。
-
バグ: 静的な領域へのポインターを返すため、呼び出しごとに上書きされる。
char *
clnt_sperrno(stat)
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(rpch, s)
CLIENT *rpch;
char *s;
-
clnt_perror()
と同様であるが、標準エラー出力に表示する代りに
(clnt_sperrno()
のように) 文字列へのポインターを返す点が異っている。
-
バグ: 呼び出しごとに上書きされる静的データへのポインターを返す。
CLIENT *
clntraw_create(prognum, versnum)
u_long prognum, versnum;
-
このルーティンはリモート・プログラム
prognum、
バージョン
versnum
のための擬似
RPC
クライアントを作成する。メッセージをサービスに渡すために使用する
通信は実際にはそのプロセスのアドレス空間にあるバッファーである。
それで、対応する
RPC
サーバが同じアドレス空間の中にいなければならない。
svcraw_create()
を参照すること。
これにより
RPC
のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの
RPC
オーバヘッドの獲得ができる。失敗した場合にはこのルーティンは
NULL
を返す。
CLIENT *
clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz)
struct sockaddr_in *addr;
u_long prognum, versnum;
int *sockp;
u_int sendsz, 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(addr, prognum, versnum, wait, sockp)
struct sockaddr_in *addr;
u_long prognum, 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(addr, prognum, versnum, wait, sockp, sendsize, recosize)
struct sockaddr_in *addr;
u_long prognum, 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(addr)
struct sockaddr_in *addr;
-
このマシンの
IP
アドレスを
*addr
に格納する。
/etc/hosts
を扱うライブラリ・ルーティンは使用しない。ポート番号は常に
htons(PMAPPORT)
に設定される。
struct pmaplist *
pmap_getmaps(addr)
struct sockaddr_in *addr;
-
portmap
サービスのためのユーザインターフェースであり、
IP
アドレス
*addr
にあるホストの現在の
RPC
プログラムからポート番号へのマッピングの一覧を返す。
このルーティンが
NULL
を返す場合もある。
`rpcinfo -p'
コマンドはこのルーティンを使用している。
u_short
pmap_getport(addr, prognum, versnum, protocol)
struct sockaddr_in *addr;
u_long prognum, versnum;
u_int protocol;
-
portmap
サービスのためのユーザ・インターフェースで、
プログラム番号
prognum、
バージョン
versnum、
関連付けられた通信プロトコル
protocol
をサポートするサービスが待っているポート番号を返す。
protocol
の値はほとんどの場合
IPPROTO_UDP
か
IPPROTO_TCP
である。返り値ゼロはマッピングが存在しないか、
RPC
システムがリモートの
portmap
サービスの参照に失敗したことを意味する。後者の場合は大域変数
rpc_createerr()
が
RPC
状態を保持している。
enum clnt_stat
pmap_rmtcall(addr, prognum, versnum, procnum, inproc, in, outproc, out, tout, portp)
struct sockaddr_in *addr;
u_long prognum, versnum, procnum;
char *in, *out;
xdrproc_t inproc, outproc;
struct timeval tout;
u_long *portp;
-
portmap
サービスのためのユーザ・インターフェースで、
IP
アドレス
*addr
のホストの
portmap
を参照して、
RPC
呼び出しを生成し、そのホスト上のプロシジャを呼び出す。
パラメーター
*portp
はプロシジャが成功した場合にはプログラムのポート番号に修正される。
他のパラメーターの定義については
callrpc()
や
clnt_call()
で説明してある。
このプロシジャは lqpingrq のみに使用すべきである。
clnt_broadcast()
も参照すること。
pmap_set(prognum, versnum, protocol, port)
u_long prognum, versnum;
u_int protocol;
u_short port;
-
portmap
サービスのためのユーザ・インターフェースで、
[prognum,versnum,protocol]
の組み合わせと
port
との間のマッピングを、そのマシン上の
portmap
サービスに登録する。
protocol
はほとんどの場合
IPPROTO_UDP
か
IPPROTO_TCP
のどちらかである。
このルーティンは成功した場合には 1 を返す。失敗した場合にはゼロを返す。
svc_register()
によって自動的に実行される。
pmap_unset(prognum, versnum)
u_long prognum, versnum;
-
portmap
サービスのためのユーザ・インターフェースで、
[prognum,versnum,*]
の組み合わせと
ports
の間のマッピングをそのマシン上の
portmap
サービスから削除する。このルーティンは成功した場合は 1 を返す。
失敗した場合には 0 を返す。
registerrpc(prognum, versnum, procnum, procname, inproc, outproc)
u_long prognum, versnum, procnum;
char *(*procname) () ;
xdrproc_t inproc, outproc;
-
RPC
サービスパッケージを使用して
procname
プロシジャを登録する。プログラム
prognum、
バージョン
versnum、
プロシジャ
procnum
への要求が届いた場合、
procname
がパラメーターへのポインターを持って呼び出される。
progname
は静的な結果へのポインターを返す必要がある。
inproc
はパラメーターをデコードするために使用される。
outproc
は結果をエンコードするために使用される。
このルーティンは登録に成功した場合にはゼロを返す。
失敗した場合には -1を返す。
-
警告: この形式で登録されたリモート・プロシジャは
UDP/IP
通信を使用する。制限に関しては
svcudp_create()
を参照すること。
struct rpc_createerr rpc_createerr;
-
成功しなかった
RPC
クライアント生成ルーティンによって設定される大域変数。
clnt_pcreateerror()
ルーティンが理由を表示するために使用する。
svc_destroy(xprt)
SVCXPRT *
xprt;
-
このマクロは通信ハンドル
xprt
の
RPC
サービスを破壊する。破壊には通常、
xprt
を含めて、私的なデータ構造体の破棄が含まれている。
このルーティンを呼び出した後に
xprt
を使用することは未定義である。
fd_set svc_fdset;
-
RPC
サービス側のファイル・ディスクリプターのビットマスクを反映した大域変数。
select(2)
システムコールのパラメーターのために利用できる。これは
サービスの実装者が
svc_run()
を呼び出さなずに、独自の非同期イベント処理を用いる場合にのみ意味がある。
この変数は読み込み専用で (そのまま
select(2)
へ渡してはならない!)、
svc_getreqset()
呼び出しや生成ルーティンの後に変更されているかもしれない。
int svc_fds;
-
svc_fedset
に似ているが、32 ディスクリプターに制限されている。
このインターフェースは
svc_fdset
によって置き換えられた。
svc_freeargs(xprt, inproc, in)
SVCXPRT *xprt;
xdrproc_t inproc;
char *in;
-
このマクロはサービス・プロシジャが
svc_getargs()
を使用して引き数をデコードした時に
RPC/XDR
システムによって割り当てられたデータを解放する。
このルーティンは解放に成功した場合には 1 を返す。
失敗した場合にはゼロを返す。
svc_getargs(xprt, inproc, in)
SVCXPRT *xprt;
xdrproc_t inproc;
char *in;
-
このマクロは
RPC
サービス通信ハンドル
xprt
に関連付けられた
RPC
要求の引き数をデコードする。パラメーター
in
は引き数の格納されたアドレスである。
inproc
は引き数をデコードするための
XDR
ルーティンである。
このルーティンはデコードに成功した場合は 1 を返す。
失敗した場合はゼロを返す。
struct sockaddr_in *
svc_getcaller(xprt)
SVCXPRT *xprt;
-
RPC
サービス通信ハンドル
xprt
に関連付けられたプロシジャの呼び出し元のネットワーク・アドレスを
取得するための標準的な手段。
svc_getreqset(rdfds)
fd_set *rdfds;
-
このルーティンはサービスの実装者が
svc_run()
を呼び出さず、独自の非同期イベント処理を実装する場合にのみ意味がある。
これは
select(2)
システムコールが
RPC
ソケットに
RPC
要求が到着したと返した場合にのみ呼び出される。
rdfds
は結果の読み込みファイル・ディスクリプターのビットマスクである。
このルーティンは
rdfds
の値に関連付けられた全てのソケットのサービスが行なわれた時に
返ってくる。
svc_getreq(rdfds)
int rdfds;
-
svc_getreqset()
に似ているがディスクリプターの数が 32 に制限されている。
このインターフェースは
svc_getreqset()
によって置き換えられた。
svc_register(xprt, prognum, versnum, dispatch, protocol)
SVCXPRT *xprt;
u_long prognum, versnum;
void (*dispatch) ();
u_long protocol;
-
prognum
と
versnum
をサービス配分プロシジャ
dispatch
で関連付ける。
protocol
がゼロの場合、サービスは
portmap
サービスには登録されない。
protocol
がゼロ以外の場合、
[prognum,versnum,protocol]
の組み合わせと xprt->xp_port とのマッピングがローカルの
portmap
サービスに登録される。(一般的に
protocol
はゼロ、
IPPROTO_UDP
、
IPPROTO_TCP
のどれかである。)
プロシジャ
dispatch
は以下の形式である:
-
dispatch(request, xprt)
struct svc_req *request;
SVCXPRT *xprt;
-
svc_register()
ルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
svc_run()
-
このルーティンは戻ってこない。これは
RPC
要求の到着を待ち、どれかが届いた場合に
svc_getreq()
を使用して適切なサービス・プロシジャを呼び出す。
このプロシジャは通常は
select(2)
システムコールから返るのを待っている。
svc_sendreply(xprt, outproc, out)
SVCXPRT *xprt;
xdrproc_t outproc;
char *out;
-
RPC
サービス配分ルーティンによってリモート・プロシジャ・コールの結果を
返すために呼び出される。
パラメーター
xprt
はその要求に関連付けられた通信ハンドルである。
outproc
は結果をエンコードするために使用する
XDR
ルーティンである。
out
は結果のアドレスである。このルーティンは成功した場合は 1 を返す。
失敗した場合はゼロを返す。
void
svc_unregister(prognum, versnum)
u_long prognum, versnum;
-
配分ルーティンから
[prognum,versnum]
および
[prognum,versnum,*]
の組み合わせからポート番号へのマッピングを全て削除する。
void
svcerr_auth(xprt, why)
SVCXPRT *xprt;
enum auth_stat why;
-
認証エラーによりリモート・プロシジャ・コールの実行を拒否された
場合にサービス配分ルーティンによって呼び出される。
void
svcerr_decode(xprt)
SVCXPRT *xprt;
-
パラメータのデコードに失敗した場合に
サービス配分ルーティンによって呼び出される。
svc_getargs()
も参照すること。
void
svcerr_noproc(xprt)
SVCXPRT *xprt;
-
要求のあったプロシジャ番号が実装されていない場合に
サービス配分ルーティンより呼び出される。
void
svcerr_noprog(xprt)
SVCXPRT *xprt;
-
RPC
パッケージに要求されたプログラムが登録されていない場合に呼び出される。
サービスの実装には通常、このルーティンは必要ない。
void
svcerr_progvers(xprt)
SVCXPRT *xprt;
-
RPC
パッケージに要求されたバージョンのプログラムが登録されていない場合に
呼び出される。サービスの実装には通常、このルーティンは必要ない。
void
svcerr_systemerr(xprt)
SVCXPRT *xprt;
-
特定のプロトコルによってカバーされていなシステム・エラーが
検出された場合にサービス配分ルーティンによって呼び出される。
例えば、サービスがそれ以上、記憶装置を割り当てることができない場合には
このルーティンが呼び出されるかもしれない。
void
svcerr_weakauth(xprt)
SVCXPRT *xprt;
-
認証パラメータが足りないためにリモート・プロシジャ・コールの実行を
拒否された場合にサービス配分ルーティンによって呼び出される。
このルーティンは
svcerr_auth(xprt, AUTH_TOOWEAK)
を呼び出す。
SVCXPRT *
svcfd_create(fd, sendsize, recvsize)
int fd;
u_int sendsize;
u_int recvsize;
-
任意のオープンされたディスクリプター上にサービスを作成する。
典型的に、ディスクリプターは
TCP
のようなストリーム・プロトコルで接続されたソケットである。
sendsize
と
recvsize
には送信バッファと受信バッファの大きさを指定する。もしゼロが指定された
場合は適切なデフォルトが選択される。
SVCXPRT *
svcraw_create()
-
このルーティンは擬似
RPC
サービス通信を生成して、そのポインターを返す。
通信は実際にはそのプロセスのアドレス空間にあるバッファなので
対応する
RPC
クライアントは同じアドレス空間にいる必要がある。
clntraw_create()
を参照すること。
このルーティンで
RPC
のシミュレーションや、カーネル・インターフェースに影響されずに応答時間などの
RPC
オーバヘッドを取得ができる。このルーティンは失敗した場合は
NULL
を返す。
SVCXPRT *
svctcp_create(sock, send_buf_size, recv_buf_size)
int sock;
u_int send_buf_size, 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(sock, sendsize, recosize)
int sock;
-
このルーティンは
UDP/IP
に基づいた
RPC
サービス通信を作成し、そのポインターを返す。
通信はソケット
sock
に関連付けられる。
sock
は
RPC_ANYSOCK
でも良い。この場合は新しいソケットが作成される。
ソケットがローカルの
UDP
ポートに bind されていない場合にはこのルーティンは適当なポートに
bind する。補完された場合、xprt->xp_sock に通信のソケットの
ディスクリプターが、xprt->xp_port に通信のポート番号が
設定される。このルーティンは失敗した場合には
NULL
を返す。
-
これによりユーザは
UDP
に基づいた
RPC
メッセージで使用できる送信パケットおよび受信パケットの最大サイズを指定できる。
SVCXPRT *
svcudp_create(sock)
int sock;
-
送信パケットと受信パケットのサイズを同じデフォルトの値 SZ に指定した
svcudp_bufcreate(sock,SZ,SZ) と等価である。
xdr_accepted_reply(xdrs, ar)
XDR *xdrs;
struct accepted_reply *ar;
-
RPC
応答メッセージをエンコードするのに使用する。このルーティンは
RPC
パッケージを用いずに
RPC-形式
のメッセージを作成しようとする場合に便利である。
xdr_authunix_parms(xdrs, aupp)
XDR *xdrs;
struct authunix_parms *aupp;
-
UNIX
形式の証明書を記述するために使用する。このルーティンは
RPC
認証パッケージを使用せずにこれらの証明書を作成しようとする場合に
便利である。
void
xdr_callhdr(xdrs, chdr)
XDR *xdrs;
struct rpc_msg *chdr;
-
RPC
呼び出しのヘッダー・メッセージを記述するために使用する。
このルーティンは
RPC
パッケージを使用せずに
RPC-形式
のメッセージを作成しようとする場合に便利である。
xdr_callmsg(xdrs, cmsg)
XDR *xdrs;
struct rpc_msg *cmsg;
-
RPC
呼び出しメッセージを記述するのに使用する。
このルーティンは
RPC
パッケージを使用せずに
RPC-形式
のメッセージを作成しようとする場合に便利である。
xdr_opaque_auth(xdrs, ap)
XDR *xdrs;
struct opaque_auth *ap;
-
PRC
認証情報メッセージを記述するために使用する。
このルーティンは
RPC
パッケージを使用せずに
RPC-形式
のメッセージを作成しようとする場合に便利である。
xdr_pmap(xdrs, regs)
XDR *xdrs;
struct pmap *regs;
-
各種の
portmap
プロシジャへのパラメーターを外部的に記述するために使用する。
このルーティンは
pmap
インターフェースを使用せずに、これらのパラメーターを
作成したい場合に便利である。
xdr_pmaplist(xdrs, rp)
XDR *xdrs;
struct pmaplist **rp;
-
ポートのマッピングのリストを外部的に記述するために使用する。
このルーティンは
pmap
インターフェースを使用せずに、これらのパラメーターを
作成したい場合に便利である。
xdr_rejected_reply(xdrs, rr)
XDR *xdrs;
struct rejected_reply *rr;
-
RPC
応答メッセージを記述するために使用する。このルーティンは
RPC
パッケージを使用せずに、
RPC-形式
のメッセージを作成したい場合に便利である。
xdr_replymsg(xdrs, rmsg)
XDR *xdrs;
struct rpc_msg *rmsg;
-
RPC
応答メッセージを記述するために使用する。
このルーティンは
RPC
パッケージを使用せずに、
RPC
形式のメッセージを作成したい場合に便利である。
void
xprt_register(xprt)
SVCXPRT *xprt;
-
RPC
サービス通信ハンドルを生成した後に、それら自身を
RPC
サービス・パッケージに登録する必要がある。
このルーティンは大域変数
svc_fds()
を修正する。サービスの実装者は通常、このルーティンは必要ない。
void
xprt_unregister(xprt)
SVCXPRT *xprt;
-
RPC
サービス通信ハンドルを破壊する前に、それを
RPC
通信パッケージから登録解除する必要がある。
このルーティンは大域変数
svc_fds()
を修正する。サービスの実装者は通常、このルーティンは必要ない。
関連項目
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.
Index
- 名前
-
- 書式と説明
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:59 GMT, November 19, 2007