Project

General

Profile

Feature #18630

Updated by ioquatix (Samuel Williams) over 2 years ago

I would like us to consider introducing a general IO timeout for all blocking operations, operations. This timeout can be specified per per-IO IO instance. It's useful for ensuring programs don't stop responding or spend an unreasonable amount of time waiting for IO operations. 

 There are effectively two kinds of interfaces that we need to address: 

 - Those that already have a timeout argument (e.g. `wait_readable`) and we follow the existing semantics. 
 - Those that don't have a timeout argument or timeout semantics (e.g. `puts`, `gets`), and thus probably need to raise an exception on timeout. 

 We have three possible kinds of exceptions we could raise: 

 - `Errno::ETIMEDOUT` 
 - `Timeout::Error` (from `timeout.rb`) 
 - Introduce `IO::Timeout` or something similar. 

 Timeout isn't necessarily an error condition. There are different arguments for whether we should define: 

 ```ruby 
 class IO::Timeout < Exception 
 end 

 # or 

 class IO::Timeout < StandardError 
 end 
 ``` 

 I believe the latter (`StandardError`) is more practical but I'm open to either option. I might have more specific arguments later why one is better than the other after testing in a practical system. 

 There is already a PR to try it out: https://github.com/ruby/ruby/pull/5653

Back