Class: HTTPX::TCP
Constant Summary
Constants included from Loggable
Instance Attribute Summary collapse
-
#addresses ⇒ Object
readonly
Returns the value of attribute addresses.
-
#interests ⇒ Object
readonly
Returns the value of attribute interests.
-
#ip ⇒ Object
(also: #host)
readonly
Returns the value of attribute ip.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#state ⇒ Object
readonly
Returns the value of attribute state.
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
- #connect ⇒ Object
- #connected? ⇒ Boolean
-
#initialize(origin, addresses, options) ⇒ TCP
constructor
A new instance of TCP.
-
#inspect ⇒ Object
:nocov:.
- #protocol ⇒ Object
- #read(size, buffer) ⇒ Object
- #to_io ⇒ Object
- #write(buffer) ⇒ Object
Methods included from Loggable
Constructor Details
#initialize(origin, addresses, options) ⇒ TCP
Returns a new instance of TCP.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/httpx/io/tcp.rb', line 16 def initialize(origin, addresses, ) @state = :idle @hostname = origin.host @options = Options.new() @fallback_protocol = @options.fallback_protocol @port = origin.port @interests = :w if @options.io @io = case @options.io when Hash @options.io[origin.] else @options.io end raise Error, "Given IO objects do not match the request authority" unless @io _, _, _, @ip = @io.addr @addresses ||= [@ip] @ip_index = @addresses.size - 1 @keep_open = true @state = :connected else @addresses = addresses.map { |addr| addr.is_a?(IPAddr) ? addr : IPAddr.new(addr) } end @ip_index = @addresses.size - 1 @io ||= build_socket end |
Instance Attribute Details
#addresses ⇒ Object (readonly)
Returns the value of attribute addresses.
12 13 14 |
# File 'lib/httpx/io/tcp.rb', line 12 def addresses @addresses end |
#interests ⇒ Object (readonly)
Returns the value of attribute interests.
12 13 14 |
# File 'lib/httpx/io/tcp.rb', line 12 def interests @interests end |
#ip ⇒ Object (readonly) Also known as: host
Returns the value of attribute ip.
12 13 14 |
# File 'lib/httpx/io/tcp.rb', line 12 def ip @ip end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
12 13 14 |
# File 'lib/httpx/io/tcp.rb', line 12 def port @port end |
#state ⇒ Object (readonly)
Returns the value of attribute state.
12 13 14 |
# File 'lib/httpx/io/tcp.rb', line 12 def state @state end |
Instance Method Details
#close ⇒ Object
152 153 154 155 156 157 158 159 160 |
# File 'lib/httpx/io/tcp.rb', line 152 def close return if @keep_open || closed? begin @io.close ensure transition(:closed) end end |
#closed? ⇒ Boolean
166 167 168 |
# File 'lib/httpx/io/tcp.rb', line 166 def closed? @state == :idle || @state == :closed end |
#connect ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/httpx/io/tcp.rb', line 52 def connect return unless closed? if @io.closed? transition(:idle) @io = build_socket end try_connect rescue Errno::EHOSTUNREACH => e raise e if @ip_index <= 0 @ip_index -= 1 retry rescue Errno::ETIMEDOUT => e raise ConnectTimeoutError.new(@options.timeout[:connect_timeout], e.) if @ip_index <= 0 @ip_index -= 1 retry end |
#connected? ⇒ Boolean
162 163 164 |
# File 'lib/httpx/io/tcp.rb', line 162 def connected? @state == :connected end |
#inspect ⇒ Object
:nocov:
171 172 173 |
# File 'lib/httpx/io/tcp.rb', line 171 def inspect "#<#{self.class}: #{@ip}:#{@port} (state: #{@state})>" end |
#protocol ⇒ Object
48 49 50 |
# File 'lib/httpx/io/tcp.rb', line 48 def protocol @fallback_protocol end |
#read(size, buffer) ⇒ Object
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/httpx/io/tcp.rb', line 89 def read(size, buffer) @io.read_nonblock(size, buffer) log { "READ: #{buffer.bytesize} bytes..." } buffer.bytesize rescue ::IO::WaitReadable buffer.clear 0 rescue EOFError nil end |
#to_io ⇒ Object
44 45 46 |
# File 'lib/httpx/io/tcp.rb', line 44 def to_io @io.to_io end |
#write(buffer) ⇒ Object
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/httpx/io/tcp.rb', line 100 def write(buffer) siz = @io.write_nonblock(buffer) log { "WRITE: #{siz} bytes..." } buffer.shift!(siz) siz rescue ::IO::WaitWritable 0 rescue EOFError nil end |