Module: CZTop::SendReceiveMethods
Overview
Constant Summary collapse
- JIFFY =
15 ms
0.015
Instance Method Summary collapse
-
#<<(message) ⇒ self
Sends a message.
- #now ⇒ Object private
-
#read_timeout ⇒ Float?
The timeout in seconds used by IO#wait_readable.
-
#receive ⇒ Message
Receives a message.
-
#wait_readable(timeout = read_timeout) ⇒ true
Waits for socket to become readable.
-
#wait_writable(timeout = write_timeout) ⇒ true
Waits for socket to become writable.
-
#write_timeout ⇒ Float?
The timeout in seconds used by IO#wait_writable.
Instance Method Details
#<<(message) ⇒ self
Sends a message.
26 27 28 29 |
# File 'lib/cztop/send_receive_methods.rb', line 26 def <<() Message.coerce().send_to(self) self end |
#now ⇒ Object (private)
151 152 153 |
# File 'lib/cztop/send_receive_methods.rb', line 151 def now Process.clock_gettime(Process::CLOCK_MONOTONIC) end |
#read_timeout ⇒ Float?
Returns the timeout in seconds used by IO#wait_readable.
121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/cztop/send_receive_methods.rb', line 121 def read_timeout timeout = .rcvtimeo if timeout <= 0 timeout = nil else timeout = timeout.to_f / 1000 end timeout end |
#receive ⇒ Message
Receives a message.
40 41 42 |
# File 'lib/cztop/send_receive_methods.rb', line 40 def receive Message.receive_from(self) end |
#wait_readable(timeout = read_timeout) ⇒ true
Waits for socket to become readable.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/cztop/send_receive_methods.rb', line 52 def wait_readable(timeout = read_timeout) return true if readable? @fd_io ||= to_io if timeout timeout_at = now + timeout while true # p wait_readable: self, timeout: timeout @fd_io.wait_readable(timeout) break if readable? # NOTE: ZMQ FD can't be trusted raise ::IO::TimeoutError if now >= timeout_at # HACK for edge case: avoid hogging CPU if FD for socket type doesn't block and just insists sleep JIFFY end else while true # p wait_readable: self @fd_io.wait_readable break if readable? # NOTE: ZMQ FD can't be trusted # HACK for edge case: avoid hogging CPU if FD for socket type doesn't block and just insists sleep JIFFY end end true end |
#wait_writable(timeout = write_timeout) ⇒ true
Waits for socket to become writable.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/cztop/send_receive_methods.rb', line 88 def wait_writable(timeout = write_timeout) return true if writable? @fd_io ||= to_io if timeout timeout_at = now + timeout while true # p wait_writable: self, timeout: timeout @fd_io.wait_writable(timeout) break if writable? # NOTE: ZMQ FD can't be trusted raise ::IO::TimeoutError if now >= timeout_at # HACK for edge case: avoid hogging CPU if FD for socket type doesn't block and just insists sleep JIFFY end else while true # p wait_writable: self @fd_io.wait_writable break if writable? # NOTE: ZMQ FD can't be trusted # HACK for edge case: avoid hogging CPU if FD for socket type doesn't block and just insists sleep JIFFY end end true end |
#write_timeout ⇒ Float?
Returns the timeout in seconds used by IO#wait_writable.
135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/cztop/send_receive_methods.rb', line 135 def write_timeout timeout = .sndtimeo if timeout <= 0 timeout = nil else timeout = timeout.to_f / 1000 end timeout end |