in reply to What makes IO::Select::can_read return?

If I read the docs:
can_read ( [ TIMEOUT ] ) Return an array of handles that are ready for reading. "TIM +EOUT" is the maximum amount of time to wait before returning an empt +y list, in seconds, possibly fractional. If "TIMEOUT" is not given and + any han- dles are registered then the call will block.

It never says it's always going to wait for the TIMEOUT, it just says it's not going to wait longer than the timeout.

AFAIK this might be a bug in perl, a bug in your OS, or it might be a completely reasonable effect of the way select() is implemented... According to my select(2) manpage (on Linux) errno should be set when select(2) returns -1. Try printing $! in your else routine.

Also note that you should not use buffered IO when using select (so use sysread() and syswrite() instead of read() if you don't already).