Project

General

Profile

Feature #18630

Updated by ioquatix (Samuel Williams) over 2 years ago

I would like us to consider introducing a general timeout for all blocking operations. This timeout can be specified per 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 two 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