Well, I forgot #3:
3> The OS has a buggy poll() or select().
This is unlikely when we are talking about Solaris, if nothing else since it's manpage uses blocking I/O with select.
Also:
POLLIN Data other than high priority data may be read without blocking. For STREAMS, this flag is set in revents even if the message is of zero length.
POLLRDNORM Normal data (priority band equals 0) may be read without blocking. For STREAMS, this flag is set in revents even if the message is of zero length.
POLLRDBAND Data from a non-zero priority band may be read without blocking. For STREAMS, this flag is set in revents even if the message is of zero length.
POLLPRI High priority data may be received without blocking. For STREAMS, this flag is set in revents even if the message is of zero length.
POLLOUT Normal data (priority band equals 0) may be written without blocking.
POLLWRNORM The same as POLLOUT.
POLLWRBAND Priority data (priority band > 0) may be written. This event only examines bands that have been written to at least once.
POLLERR An error has occurred on the device or stream. This flag is only valid in the revents bitmask; it is not used in the events member.
POLLHUP A hangup has occurred on the stream. This event and POLLOUT are mutually exclusive; a stream can never be writable if a hangup has occurred. However, this event and POLLIN, POLLRDNORM, POLLRDBAND, or POLLPRI are
It is not possible to use the POLLOUT feature, though, since pike does not have a read( len, 1 ) equivalent for write.