Module: Yahns::SendfileCompat
- Included in:
- IO, OpenSSLClient
- Defined in:
- lib/yahns/sendfile_compat.rb
Overview
Copyright © 2009-2014, Eric Wong <[email protected]> et. al. License: GPLv3 or later (www.gnu.org/licenses/gpl-3.0.txt)
Instance Method Summary collapse
Instance Method Details
#trysendfile(io, offset, count) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/yahns/sendfile_compat.rb', line 6 def trysendfile(io, offset, count) return 0 if count == 0 count = 0x4000 if count > 0x4000 buf = Thread.current[:yahns_sfbuf] ||= '' io.pos = offset str = io.read(count, buf) or return # nil for EOF n = 0 case rv = kgio_trywrite(str) when String # partial write, keep trying n += (str.size - rv.size) str = rv when :wait_writable, :wait_readable return n > 0 ? n : rv when nil return n + str.size # yay! end while true end |