Linux pipes are broken, we need O_RDWR instead of O_RDONLY

PerlでEvent::Libのコードスケッチ(名前付きパイプを3つ監視してだれかがデータ入れたら読み出す)したんだけどどうも意図したように動かんなーと思ってたら、

/* Linux pipes are broken, we need O_RDWR instead of O_RDONLY */
#ifdef __linux
  socket = open (fifo, O_RDWR | O_NONBLOCK, 0);
#else
  socket = open (fifo, O_RDONLY | O_NONBLOCK, 0);
#endif 
http://www.monkey.org/~provos/libevent/event-test.c

が原因だったす。

$fh->open($p, O_RDONLY|O_NONBLOCK);

$fh->open($p, O_RDWR|O_NONBLOCK);

に変えたらOKだったす。