Module: RubyLens::Clip::DeadlineIO
- Defined in:
- lib/rubylens/clip/deadline_io.rb
Overview
Deadline-bounded, non-blocking socket reads shared by the DevTools WebSocket channel and the local DevTools HTTP client.
Class Method Summary collapse
- .deadline(timeout) ⇒ Object
- .monotonic ⇒ Object
- .read_chunk(socket, deadline, closed_message:, timeout_message:) ⇒ Object
Class Method Details
.deadline(timeout) ⇒ Object
14 |
# File 'lib/rubylens/clip/deadline_io.rb', line 14 def deadline(timeout) = monotonic + timeout |
.monotonic ⇒ Object
12 |
# File 'lib/rubylens/clip/deadline_io.rb', line 12 def monotonic = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
.read_chunk(socket, deadline, closed_message:, timeout_message:) ⇒ Object
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/rubylens/clip/deadline_io.rb', line 16 def read_chunk(socket, deadline, closed_message:, timeout_message:) remaining = deadline - monotonic raise Error, if remaining <= 0 IO.select([socket], nil, nil, remaining) or raise Error, chunk = socket.read_nonblock(1 << 20, exception: false) raise Error, if chunk.nil? chunk.is_a?(String) ? chunk : "".b rescue SystemCallError, IOError => error raise Error, "#{}: #{error.}" end |