KLICでは、送信するメッセージはencode_XXXにより生成されるが、 基本的に以下のようになっている(詳細な構造は実装に依存する)。
受信時には、このメッセージ内の「処理関数のアドレス」を参照し、
その関数に残りのデータを渡すことによりdecode処理を行うことになっている。
つまり、decodeのdispatchはメッセージ中に記述されている関数を
直接呼びだすことにより行われている。
なお、各種decode処理は、各々のメッセージに応じて、decode_XXXなる名称で runtime/cntlmsg.c内で定義されている。
この受信に関する処理は、runtime/sendrecv.c内でrecv_message()により 定義されている。
なお、受信処理のきっかけは、以下の2つを併用している。
割り込み、タイマとも、第4.1.1章 (
ページ), 第4.3章 (
ページ)で記述された方法を用い、
実際の処理は、リダクションの切れ目で行われるように設定されている。
receive_message()の下位では、実装依存のreceive_packe()関数を呼びだしており、 これが実装間のインターフェースになっている。