next up previous contents
: launcher の例 : ox : TCP/IP でのセッションのスタート : Launcher   目次


byte order の決定

コントロールプロセス, 計算プロセス ともに, 起動直後に 1 byte のデータを書き出し flush する. そのあと, 1 byte のデータを読み込む. クライアントはコントロールプロセス, 計算プロセス につながるファイルディスクリプタの両方から まず 1 byte のデータを読む. そのあと 1 byte のデータを書き出し flush する. 1 byte のデータは, 0, 1, FF のどれかであり, 0 は以下の通信において int32 をおくるのに, network byte order を使用したい, 1 は以下の通信において int32 をおくるのに, little endian を使用したい, FF は以下の通信において int32 をおくるのに, big endian を使用したい, という意味である. 両者の希望が一致しない場合はつねに 0 (network byte order) を使用する. Network byte order しか実装していないシステムでは, 0 をおくればよい. ただし効率が問題となる通信において, network byte order への変換は おおきなボトルネックとなることがあることを了解しておくべきである.

64 bit machine double および 128 bit machine double (浮動小数点数) のやりとりに際しても, 上と同様な方法をもちいるものとする. すなわち double64 *int32 * にキャストしてから, 中身を int32 と同様の処理方法で送受信する. 例については CMO_64BIT_MACHINE_DOUBLE を見よ.

#define OX_BYTE_NETWORK_BYTE_ORDER    0
#define OX_BYTE_LITTLE_ENDIAN         1
#define OX_BYTE_BIG_ENDIAN         0xff



Nobuki Takayama 平成28年8月27日