[OT] select and sysread problem on solaris

Dirk Koopman djk at tobit.co.uk
Thu Sep 11 11:25:42 BST 2008


Mark Blackman wrote:
> On 11 Sep 2008, at 02:12, Paul Johnson wrote:
> 
>>
>> Recently, another thirty or so pipes have been added to this group and
>> very occassionally I am noticing a problem whereby select will indicate
>> that a pipe is ready for reading and sysread will attempt to read from
>> the pipe, but there is actually nothing there to be read, and so the
>> sysread call hangs waiting for input.
>>

> 
> the perl select docs also suggest you use the O_NONBLOCK flag for the
> case you're referring to as well.
>

Select(), on any platform, *may* return an indication that there is data 
to read when there isn't. Therefore using blocking reads with select() 
*will* fail, at some point, in the manner that you describe. The busier 
the system, the more likely it is to occur.

Any tutorial on the use of select() should really mandate the use of 
O_NONBLOCK so that one can capture the EAGAIN/EWOULDBLOCK/EINPROGRESS 
error(s) and then ignore them. If your sysread returns UNDEF, then check 
for these errors in $! and just carry on, otherwise signal EOF in the 
normal way.

Dirk




More information about the london.pm mailing list