an attempt at differentiated error handling for timeouts and eof. really this needs to be propagated all the way to the callback. svn:r273