diff options
author | Eric Wong <e@80x24.org> | 2015-10-09 01:01:53 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-10-09 21:54:19 +0000 |
commit | 64dc570f4b99f68b5ed792b36e7e8abc3df74927 (patch) | |
tree | 9c953120593bf303d90eda4c6d5afc0b0aa9691d /lib/kgio/autopush/sock_rw.rb | |
parent | 26d81c709a842c2435c2ef8acd47ffc0976978ed (diff) | |
download | kgio-64dc570f4b99f68b5ed792b36e7e8abc3df74927.tar.gz |
This avoids breaking compatibility for existing apps, but is less performant (although safer and more resilient to future changes in Ruby) than the previous C version.
Diffstat (limited to 'lib/kgio/autopush/sock_rw.rb')
-rw-r--r-- | lib/kgio/autopush/sock_rw.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/kgio/autopush/sock_rw.rb b/lib/kgio/autopush/sock_rw.rb new file mode 100644 index 0000000..52f7a45 --- /dev/null +++ b/lib/kgio/autopush/sock_rw.rb @@ -0,0 +1,68 @@ +# Copyright (C) 2015 all contributors <kgio-public@bogomips.org> +# License: LGPLv2.1 or later (https://www.gnu.org/licenses/lgpl-2.1.txt) + +# using this code is not recommended, for backwards compatibility only +module Kgio::Autopush::SockRW # :nodoc: + include Kgio::Autopush + + def kgio_read(*) # :nodoc: + kgio_push_pending_data + super + end + + def kgio_read!(*) # :nodoc: + kgio_push_pending_data + super + end + + def kgio_tryread(*) # :nodoc: + kgio_push_pending_data + super + end + + def kgio_trypeek(*) # :nodoc: + kgio_push_pending_data + super + end + + def kgio_peek(*) # :nodoc: + kgio_push_pending_data + super + end + + def kgio_syssend(*) # :nodoc: + kgio_push_pending_data(super) + end if Kgio::SocketMethods.method_defined?(:kgio_syssend) + + def kgio_trysend(*) # :nodoc: + kgio_ap_wrap_writer(super) + end + + def kgio_trywrite(*) # :nodoc: + kgio_ap_wrap_writer(super) + end + + def kgio_trywritev(*) # :nodoc: + kgio_ap_wrap_writer(super) + end + + def kgio_write(*) # :nodoc: + kgio_ap_wrap_writer(super) + end + + def kgio_writev(*) # :nodoc: + kgio_ap_wrap_writer(super) + end + +private + + def kgio_ap_wrap_writer(rv) # :nodoc: + case rv + when :wait_readable, :wait_writable + kgio_push_pending_data + else + kgio_push_pending + end + rv + end +end |