EN JA
RPC_SVC_CREATE(3)
RPC_SVC_CREATE(3) FreeBSD Library Functions Manual RPC_SVC_CREATE(3)

名称

rpc_svc_create, svc_control, svc_create, svc_destroy, svc_dg_create, svc_fd_create, svc_raw_create, svc_tli_create, svc_tp_create, svc_vc_createサーバ操作の作成のためのライブラリルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < rpc/rpc.h>

bool_t
svc_control( SVCXPRT *svc, const u_int req, void *info);

int
svc_create( void (*dispatch)(struct svc_req *, SVCXPRT *), const rpcprog_t prognum, const rpcvers_t versnum, const char *nettype);

SVCXPRT *
svc_dg_create( const int fildes, const u_int sendsz, const u_int recvsz);

void
svc_destroy( SVCXPRT *xprt);

SVCXPRT *
svc_fd_create( const int fildes, const u_int sendsz, const u_int recvsz);

SVCXPRT *
svc_raw_create( void);

SVCXPRT *
svc_tli_create( const int fildes, const struct netconfig *netconf, const struct t_bind *bindaddr, const u_int sendsz, const u_int recvsz);

SVCXPRT *
svc_tp_create( void (*dispatch)(struct svc_req *, SVCXPRT *), const rpcprog_t prognum, const rpcvers_t versnum, const struct netconfig *netconf);

SVCXPRT *
svc_vc_create( const int fildes, const u_int sendsz, const u_int recvsz);

解説

これらのルーチンは C 言語プログラムでネットワークを越えてサーバでプロシージャ呼び出しできるようにする RPC ライブラリの一部です。これらのルーチンはサービスハンドルの作成を処理します。ハンドルがいったん作成されると、 svc_run() を呼び出すことによって呼び出すことができます。

ルーチン

SVCXPRT データ構造体の定義に関しては rpc(3) を参照してください。
svc_control()
サービスオブジェクトに関する様々な情報を変更するか、または検索する関数。 req 引数は、操作のタイプを示し、 info は情報へのポインタです。 req のサポートされた値、それらの引数タイプ、およびそれらがすることは次の通りです:
SVCGET_VERSQUIET
要求がこのサーバに仕えるプログラム番号のために受信されますが、バージョン番号がサーバに登録された範囲の外にあるなら、通常、 RPC_PROGVERSMISMATCH エラーが返されます。 info 引数は整数へのポインタであるべきです。 SVCGET_VERSQUIET 要求が成功して事終了するなら、 *info はサーバの現在の振る舞いについて説明する整数を含んでいます: 0 は通常のサーバの振る舞い (すなわち、 RPC_PROGVERSMISMATCH エラーが返される) を示します。 1 は要求が範囲外であることを示し、静かに無視されます。
SVCSET_VERSQUIET
要求がこのサーバに仕えるプログラム番号のために受信されますが、バージョン番号がサーバに登録された範囲の外にあるなら、通常、 RPC_PROGVERSMISMATCH エラーが返されます。この振る舞いを変更することは時々望ましいことです。 info 引数は 0 (通常のサーバの振る舞いを示します - RPC_PROGVERSMISMATCH エラーが返されます) または 1 (要求が範囲外であることを示し、静かに無視されるべきです) のいずれかである整数へのポインタであるべきです。
svc_create()
svc_create() 関数はクラス nettype に属するすべての輸送のためのサーバハンドルを作成します。 nettype 引数は特定のアプリケーションに使用することができる輸送のクラスを定義します。輸送は NETPATH 変数の左から右の順序で、または netconfig データベースで上から下の順序で試みられます。 nettypeNULL であるなら、それは“netpath”をデフォルトとします。

svc_create() 関数は rpcbind サービス ( rpcbind(8) を参照) でそれ自体を登録します。 dispatch 関数は与えられた prognumversnum のために、リモートプロシージャ呼び出しがあるとき、呼び出されます。これは、 svc_run() ( rpc_svc_reg(3)svc_run() を参照) の呼び出しを必要とします。 svc_create() が成功するなら、それが作成したサーバハンドルの数を返します、そうでなければ 0 を返し、エラーメッセージはログに記録されます。

svc_destroy()
RPC サービスハンドル xprt を破壊する関数マクロ。通常、破壊は xprt 自体を含むプライベートなデータ構造の割り付け解放を必要とします。このルーチンを呼び出した後に、 xprt の使用は未定義です。
svc_dg_create()
このルーチンは、コネクションレス RPC サービスハンドルを作成して、それへのポインタを返します。失敗するなら、このルーチンは NULL を返し、エラーメッセージはログ記録されます。 sendszrecvsz 引数はバッファのサイズを指定するために使用される引数です。それらが 0 であるなら、適切なデフォルトが選ばれます。ファイル記述子 fildes はオープンされバインドされるべきです。サーバは rpcbind(8) で登録されません。

警告: コネクションレスベースの RPC メッセージがコード化されたデータの制限された数量を保持することができるだけであるので、この輸送は大きな引数を取るか、または巨大な結果を返すプロシージャで使用することができません。

svc_fd_create()
このルーチンは、オープンしてバインドされたファイル記述子の上でサービスを作成して、それへのハンドルを返します。通常、この記述子は、コネクション指向の輸送のための接続ファイル記述子です。 sendszrecvsz 引数はバッファを送信して受信するためのサイズを示します。それらが 0 であるなら、合理的なデフォルトが選ばれます。このルーチンは失敗するなら、 NULL を返し、エラーメッセージはログ記録されます。
svc_raw_create()
このルーチンは、RPC サービスハンドルを作成して、それへのポインタを返します。転送がプロセスのアドレス空間の中の本当のバッファであるので、対応する RPC クライアントは同じアドレス空間に存在するべきです ( rpc_clnt_create(3)clnt_raw_create() を参照)。このルーチンはカーネルとネットワークの干渉なしで、 RPC のシミュレーションと (ラウンドトリップタイムなどの) RPC オーバヘッドの獲得を許可します。失敗するなら、このルーチンは NULL を返し、エラーメッセージはログ記録されます。

注: svc_run() は生のインタフェースを使用しているとき、呼び出すべきではありません。

svc_tli_create()
このルーチンは、RPC サーバハンドルを作成して、それへのポインタを返します。 fildes 引数はサービスが listen (接続を受け付け) されているファイル記述子です。 fildesRPC_ANYFD であるなら、それは netconf によって指定された転送に関するファイル記述子をオープンします。ファイル記述子がバインドされず、 bindaddrNULL でないなら、 fildesbindaddr によって指定されたアドレスにバインドされます。そうでなければ、 fildes は転送によって選択されたデフォルトアドレスにバインドされます。

注: t_bind 構造体は NetBSD では使用しない、TLI/XTI SysV インタフェースに由来します。構造体は互換性のために次のように < rpc/types.h> で定義されます。

struct t_bind { 
    struct netbuf addr; /* ネットワークアドレス, rpc(3) 参照 */ 
    unsigned int  qlen; /* (listen(2) のための) キューの長さ */ 
};

デフォルトアドレスが選択される場合には、未解決の接続要求の数はコネクション指向の転送のための 8 に設定されます。ユーザは送信サイズと受信バッファを引数 sendszrecvsz で指定できます。値を 0 にすると適切なデフォルトを選択します。失敗するなら、このルーチンは NULL を返し、エラーメッセージはログ記録されます。サーバは rpcbind(8) サービスに登録されません。

svc_tp_create()
svc_tp_create() 関数は、 netconf によって指定されたネットワークのためのサーバハンドルを作成して、 rpcbind サービスでそれ自体を登録します。 dispatch 関数は、与えられた prognumversnum のために、リモートプロシージャ呼び出しがあるとき、呼び出されます。これは、 svc_run() の呼び出しを必要とします。 svc_tp_create() 関数は、成功するなら、サービスハンドルを返し、そうでなければ、 NULL を返し、エラーメッセージはログ記録されます。
svc_vc_create()
このルーチンは、コネクション指向の RPC サービスを作成して、それへのポインタを返します。失敗するなら、このルーチンは NULL を返し、エラーメッセージはログ記録されます。ユーザは送信サイズと受信バッファを引数 sendszrecvsz で指定できます。値を 0 にすると適切なデフォルトを選択します。ファイル記述子 fildes はオープンされバインドされるべきです。サーバは、 rpcbind(8) サービスで登録されません。
May 3, 1993 FreeBSD