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