use non-blocking read