Class: HTTPX::TCP
Constant Summary
Constants included from Loggable
Instance Attribute Summary collapse
-
#addresses ⇒ Object
readonly
Returns the value of attribute addresses.
-
#ip ⇒ Object
(also: #host)
readonly
Returns the value of attribute ip.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
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
- #protocol ⇒ Object
- #read(size, buffer) ⇒ Object
- #scheme ⇒ Object
- #to_io ⇒ Object
- #write(buffer) ⇒ Object
Methods included from Loggable
Constructor Details
#initialize(origin, addresses, options) ⇒ 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 @addresses = addresses @options = Options.new() @fallback_protocol = @options.fallback_protocol @port = origin.port if @options.io @io = case @options.io when Hash @options.io[origin.] else @options.io end _, _, _, @ip = @io.addr @addresses ||= [@ip] @ip_index = @addresses.size - 1 unless @io.nil? @keep_open = true @state = :connected end else @ip_index = @addresses.size - 1 @ip = @addresses[@ip_index] end @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 |
#ip ⇒ Object (readonly) Also known as: host
Returns the value of attribute ip.
10 11 12 |
# File 'lib/httpx/io/tcp.rb', line 10 def ip @ip end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
10 11 12 |
# File 'lib/httpx/io/tcp.rb', line 10 def port @port end |
Instance Method Details
#close ⇒ Object
116 117 118 119 120 121 122 123 124 |
# File 'lib/httpx/io/tcp.rb', line 116 def close return if @keep_open || closed? begin @io.close ensure transition(:closed) end end |
#closed? ⇒ Boolean
130 131 132 |
# File 'lib/httpx/io/tcp.rb', line 130 def closed? @state == :idle || @state == :closed end |
#connect ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/httpx/io/tcp.rb', line 56 def connect return unless closed? begin if @io.closed? transition(:idle) @io = build_socket end @io.connect_nonblock(Socket.sockaddr_in(@port, @ip.to_s)) rescue Errno::EISCONN end transition(:connected) rescue Errno::EHOSTUNREACH => e raise e if @ip_index <= 0 @ip_index -= 1 retry rescue Errno::EINPROGRESS, Errno::EALREADY, ::IO::WaitReadable end |
#connected? ⇒ Boolean
126 127 128 |
# File 'lib/httpx/io/tcp.rb', line 126 def connected? @state == :connected end |
#inspect ⇒ Object
134 135 136 137 |
# File 'lib/httpx/io/tcp.rb', line 134 def inspect id = @io.closed? ? "closed" : @io.fileno "#<TCP(fd: #{id}): #{@ip}:#{@port} (state: #{@state})>" end |
#protocol ⇒ Object
52 53 54 |
# File 'lib/httpx/io/tcp.rb', line 52 def protocol @fallback_protocol end |
#read(size, buffer) ⇒ Object
79 80 81 82 83 84 85 86 |
# File 'lib/httpx/io/tcp.rb', line 79 def read(size, buffer) @io.read_nonblock(size, buffer) buffer.bytesize rescue ::IO::WaitReadable 0 rescue EOFError nil end |
#scheme ⇒ Object
44 45 46 |
# File 'lib/httpx/io/tcp.rb', line 44 def scheme "http" end |
#to_io ⇒ Object
48 49 50 |
# File 'lib/httpx/io/tcp.rb', line 48 def to_io @io.to_io end |
#write(buffer) ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/httpx/io/tcp.rb', line 88 def write(buffer) siz = @io.write_nonblock(buffer) buffer.shift!(siz) siz rescue ::IO::WaitWritable 0 rescue EOFError nil end |