普通 daemon というと listen していて accept するとプロセスをフォークするアレですが、プロセスでは無くスレッドを作って対処するなんちゃって daemon を作成しました。 OCaml の Thread,Event ライブラリを利用した concurrent programming を体験するにはちょうどいい題材です。
少し解説すると、daemon.ml の
select [wrap (receive cmdCh) cmd_fsm; wrap accept_evt lunch_action]
という部分は、
* コマンドチャネルにコマンドが送られてくる * accept が起きる
という2つのイベントの内、どちらか先に起きた方だけ実行しろ、かつ、どちらかのイベントが来るまで待ってろ、という意味になります。