.. _structure: ri_intf 構造体 ---------------- 定義 ++++++++ ri_intf 構造体の定義は以下の通りである。 :: // Request Inspector Interface struct ri_intf { const char const * name; struct ri * (* initialize) (int sock, uint32_t addr, uint16_t port, char * optarg); int (* run) (struct ri *); int (* stop) (struct ri *); int (* add_node) (struct ri *, uint32_t ipaddr); int (* remove_node) (struct ri *, uint32_t ipaddr); int (* finalize) (struct ri *); const char const* (* usage) (); }; メンバ変数の詳細については本章の各項で解説する。 name ++++++++++++++++ RI の名称である。ここで設定した名前は dtsadmin コマンドなどで RI を指定する際に使用する。 initialize ++++++++++++++++ RI の初期処理を行う。 :: struct ri * initialize (int sock, uint32_t addr, uint16_t port, char * ri_optarg) * sock リクエストを受け付けるソケットディスクリプタ。RI の全スレッドが共有する。 * addr デフォルトの転送先ホストの IP アドレス。 RI 内で転送先ノードが1つも登録されていない状態でリクエストを受け付けた場合の転送先ホストとして使用する。 * port 転送先ノードの待ち受けポート番号。 * ri_optarg RI 固有のパラメータ文字列。dtsadmin コマンド -A オプションのサブオプション -s の パラメータがそのまま渡される。 initialize では主に以下の処理を実行する。 * 引数処理 * RI 独自のパラメータ設定 * スレッド数の設定 * :ref:`dispatcher` の初期化 * :ref:`nodelist` の初期化 run ++++++++++++++++ RI 全スレッドを作成する。 スレッドの挙動に関しては、 :ref:`mainthread` にて記述する。 stop ++++++++++++++++ RI 全スレッドの停止フラグを立てる。 フラグが立ったスレッドの挙動に関しては、 :ref:`mainthread` にて記述する。 add_node ++++++++++++++++ :ref:`nodelist` へノードを追加する。 詳しくは :ref:`dispatcher` へ記述する。 remove_node ++++++++++++++++ :ref:`nodelist` からノードを削除する。 詳しくは :ref:`dispatcher` へ記述する。 finalize ++++++++++++++++ finalize では RI の終了処理として主に以下の処理を実行する。 * RI 全スレッドの停止確認 * ソケットの close(2) * allocate した変数の free(2) usage ++++++++++++++++ dtsd コマンドの --help オプションなどで表示するための文字列を返す。 以下に例を示す。 :: const char usage_str[] = "[options]\n" "\n" "Options:\n" " -c threads specifies the number of server threads (default: 1)\n" " -d dispatcher specifies the dispatching algorithm (default: " DEFAULT_DISPATCHER ")\n\n";