Mac OS Xのpoll(2)でハマった

http://developer.apple.com/jp/technotes/tn2071.html

poll
この API は Mac OS X ではサポートされていません。代わりにselect 関数を使用します。


なにー!


何気にコンパイルが通るところが曲者。
O_NONBLOCKをセットしたfdを食わせると、poll()までNONBLOCKで返ってきて、ビジーループになってしまう。


同説明によれば、poll()をselect()で実装した、fakepoll.hを使えばいいらしい。

それも微妙なので、poll/epoll/kqueueを任意に切り替えられるコードの実装に、selectを追加。



さらには、Mac OS Xのkqueueは、どうやらイベント待ちなしでkevent()を呼び出せない模様。つまり、kevent(2)の第4、第5引数をNULL, 0にするとOperation not supportedでエラー。うーむ。これはバグですね。