enum HIPC_errno
はhipc.hで定義されている。各エラーを説明する文字列はclient.cのhipc_errstr
で定義されている。ここでは主要なエラーについて説明する。
クライアントエラー
- HIPC_ERR_INV_ID_STR:
hipcGet()
やhipcPut()
の引数として渡した識別文字列(構造体やそのメンバーを指定する文字列)に問題がある。
- HIPC_ERR_PROTOCOL_VIOLATION: HIPCプロトコル違反である。この違反には構成に依存するエラーも含まれる。例えば、構造体型番号の最大値がnの構成で、構造体型番号の値としてn+1が見つかった場合も、このエラーが発生する。
- HIPC_ERR_SESS_STATE_MISMATCH: まだオープンしていなかったりエラー等で閉じてしまったりしたセッションで通信を行おうとすると発生する。
- HIPC_ERR_MBR_SIZE_MISMATCH: 構造体型のメンバーにサーバーとクライアントでサイズが異なるものがある。コンフィギュレーションファイルで指定する構造体型のメンバーの型はサーバーとクライアントで同じサイズでなければならない。なお、メンバーの型がコンフィギュレーションファイルで定義した別の構造体型である場合はこの限りでない。
サーバーエラー
「HIPC_ERR_S_」で始まるエラーはQUITメッセージを通じてサーバーがクライアントに通知するエラーである。エラーは、HIPCライブラリ関数がエラーとして返すエラーと、関数から返されることはないがサーバー実装者がその判断で用いるものの2種類に分けられる。
HIPCライブラリ関数が返すエラーには以下のものがある。
- HIPC_ERR_S_INV_CFG: サーバーが対応していない構成で、クライアントがセッションの開始を要求している。hipcconfigでソースコードを生成し直していた場合は、サーバーとクライアントの両方が最新のものを利用しているか確認すべきである。
- HIPC_ERR_S_INV_NULL: NULLであってはならない変数がNULLであった。ライブラリ関数がこのエラーを返したときには、関数の引数が正しいか確認すべきである。
- HIPC_ERR_S_BUF_SHTG: 関数に渡したバッファのサイズが不足している。
- HIPC_ERR_S_OVERSIZED_STRU: 構造体型のサイズが大きすぎる。HIPCの通信に利用できる構造体型の最大サイズは255バイトである。
- HIPC_ERR_S_INV_RW_RANGE: 無効な読み書き範囲である。例: offsetとrngsizeの合計が構造体型サイズより大きく、その構造体型の変数のメモリ領域から外れた領域を読み書きしようとしている。
- HIPC_ERR_S_IO_READ: メッセージの読み込みに失敗した。
- HIPC_ERR_S_IO_WRITE: メッセージの書き込みに失敗した。
- HIPC_ERR_S_PBANK_STAT_MISMATCH: pbankでどの関数をどの順番で呼び出すかの規則に違反が生じた。
HIPCライブラリ関数が返すことのないエラーには以下のものがある。どのような状況においてこれらのエラーをサーバーが返すかは、サーバーの実装者とそのコードに委ねられている。 よって、以下の説明はあくまでその指針である。
- HIPC_ERR_S_INV_UDATA: 無効なユーザーデータである。無効の基準はサーバーの実装者に委ねられる。
- HIPC_ERR_S_INV_MSG_TYPE: 無効なメッセージタイプである。タイプとしてHIPC通信プロトコルに存在しない値が入っている、もしくはその時点ではサーバーが受けとらないメッセージタイプであることを示すのに利用できる。例: プロトコルに従えば、サーバーがSUCEESSメッセージを受け取ることはないし、HIPCセッションの先頭以外でHELLOメッセージを受け取ることもない。
- HIPC_ERR_S_INV_STRUNO: 無効な構造体型番号である。その構成では存在しない番号であるとか、PUTメッセージにPUTを禁止している構造体型が指定さているというようなことを示すのに利用できる。
- HIPC_ERR_S_V_UNINIT_MSG: 実質的に初期化されていないQUITメッセージである。このエラー番号は後から他の値で書き換えられることを前提とした初期値として利用される。よって、最後までこの値のままだったときは、前提としている途中での書き換えがなかったというエラーを示すことになる。
TOPページ
Last modified: 2015/07/27 08:00:59 +09:00