http://qiita.com/hiratara/items/2dacf8470c378b130d5c に書いたとおり。
下回りが苦手なので色々調べたのだけど、今回もGREEの https://github.com/gree/haskell-prefork なるリポジトリが役に立った。 fork
するだけじゃんと思って中を読むと、環境変数仕掛けた上で createProcess
使って自分自身を再度立ち上げる と言った涙ぐましい実装をしていたりする。古い unix
パッケージの forkProcess
のマルチコアで動いているとフォークできないみたいな制約を嫌ったのか、もしくは別のハマりどころがあってこんな実装をしているのか。
今回一番ハマったのが O_NONBLOCK
にしないといけないってことだったのだけど、先のGREEのパッケージの例だと元のファイルディスクリプタも Haskell で作っているので問題にならなかったのね、きっと。ちなみにその問題は、 waiのこのissued を見て解決した。
以前 Test::TCP 的なもの探したときもGREEの https://github.com/gree/haskell-test-sandbox に当たった記憶がある。GREEすごい。