diff options
author | Eric Wong <e@80x24.org> | 2013-11-01 00:04:59 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-11-01 00:04:59 +0000 |
commit | 7c32323bdd375b1167b42991c081e3b579ad8243 (patch) | |
tree | d044e1a6810437d331e2f3d54c974ca45400877b /lib/yahns/client_expire_generic.rb | |
parent | 885b2f28f3b31539140a8466e6205903bc7cf1d2 (diff) | |
download | yahns-7c32323bdd375b1167b42991c081e3b579ad8243.tar.gz |
It's conceivable a sub-optimally configured instance can have too many Unix sockets connected to us. This also implements expiry for systems without sufficient "struct tcp_info" support.
Diffstat (limited to 'lib/yahns/client_expire_generic.rb')
-rw-r--r-- | lib/yahns/client_expire_generic.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/yahns/client_expire_generic.rb b/lib/yahns/client_expire_generic.rb new file mode 100644 index 0000000..f2f5369 --- /dev/null +++ b/lib/yahns/client_expire_generic.rb @@ -0,0 +1,45 @@ +# 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::ClientExpireGeneric # :nodoc: + def __timestamp + Time.now.to_f + end + + def yahns_init + super # Yahns::HttpClient#yahns_init + @last_io_at = 0 + end + + def yahns_expire(timeout) + return 0 if closed? + if (__timestamp - @last_io_at) > timeout + shutdown + 1 + else + 0 + end + # shutdown may race with the shutdown in http_response_done + rescue + 0 + 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 + + def trysendfile(*args) + @last_io_at = __timestamp + super + end +end |