diff options
Diffstat (limited to 'lib/yahns/client_expire_portable.rb')
-rw-r--r-- | lib/yahns/client_expire_portable.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/yahns/client_expire_portable.rb b/lib/yahns/client_expire_portable.rb new file mode 100644 index 0000000..2ea7706 --- /dev/null +++ b/lib/yahns/client_expire_portable.rb @@ -0,0 +1,39 @@ +# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +module Yahns::ClientExpire # :nodoc: + def __timestamp + Time.now.to_f + end + + def yahns_expire(timeout) + return 0 if closed? # still racy, but avoid the exception in most cases + if (__timestamp - @last_io_at) > timeout + shutdown + 1 + else + 0 + end + rescue # the IO#closed? check is racy + 0 + end + + def kgio_read(*args) + @last_io_at = __timestamp + super + end + + def kgio_write(*args) + @last_io_at = __timestamp + super + end + + def kgio_trywrite(*args) + @last_io_at = __timestamp + super + end + + def kgio_tryread(*args) + @last_io_at = __timestamp + super + end +end |