You have to set a limit for timeout, even a nonosecond is late and can considered an error. This abstraction layer becomes useless if you wanted to rebuild the interface of the read function for higher levels.