enable Range: responses for static files for most models
[rainbows.git] / lib / rainbows / rev / sendfile.rb
blob42368a1375fba67944b0df49fc6fd6af5813a6b9
1 # -*- encoding: binary -*-
2 # :enddoc:
3 module Rainbows::Rev::Sendfile
4   if IO.method_defined?(:sendfile_nonblock)
5     def rev_sendfile(sf) # +sf+ is a Rainbows::StreamFile object
6       sf.offset += (n = @_io.sendfile_nonblock(sf, sf.offset, sf.count))
7       0 == (sf.count -= n) and raise EOFError
8       enable_write_watcher
9       rescue Errno::EAGAIN
10         enable_write_watcher
11     end
12   else
13     def rev_sendfile(body)
14       write(body.to_io.sysread(0x4000))
15     end
16   end
17 end