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(uri, 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(uri, 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 |
# File 'lib/httpx/io/tcp.rb', line 16 def initialize(uri, addresses, ) @state = :idle @hostname = uri.host @addresses = addresses @ip_index = @addresses.size - 1 = Options.new() @fallback_protocol = .fallback_protocol @port = uri.port if .io @io = case .io when Hash @ip = @addresses[@ip_index] .io[@ip] || .io["#{@ip}:#{@port}"] else @ip = @hostname .io end unless @io.nil? @keep_open = true @state = :connected end else @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
111 112 113 114 115 116 117 118 |
# File 'lib/httpx/io/tcp.rb', line 111 def close return if @keep_open || closed? begin @io.close ensure transition(:closed) end end |
#closed? ⇒ Boolean
124 125 126 |
# File 'lib/httpx/io/tcp.rb', line 124 def closed? @state == :idle || @state == :closed end |
#connect ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/httpx/io/tcp.rb', line 55 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
120 121 122 |
# File 'lib/httpx/io/tcp.rb', line 120 def connected? @state == :connected end |
#inspect ⇒ Object
128 129 130 131 |
# File 'lib/httpx/io/tcp.rb', line 128 def inspect id = @io.closed? ? "closed" : @io.fileno "#<TCP(fd: #{id}): #{@ip}:#{@port} (state: #{@state})>" end |
#protocol ⇒ Object
51 52 53 |
# File 'lib/httpx/io/tcp.rb', line 51 def protocol @fallback_protocol end |
#read(size, buffer) ⇒ Object
76 77 78 79 80 81 82 83 |
# File 'lib/httpx/io/tcp.rb', line 76 def read(size, buffer) @io.read_nonblock(size, buffer) buffer.bytesize rescue ::IO::WaitReadable 0 rescue EOFError nil end |
#scheme ⇒ Object
43 44 45 |
# File 'lib/httpx/io/tcp.rb', line 43 def scheme "http" end |
#to_io ⇒ Object
47 48 49 |
# File 'lib/httpx/io/tcp.rb', line 47 def to_io @io.to_io end |
#write(buffer) ⇒ Object
85 86 87 88 89 90 91 92 93 |
# File 'lib/httpx/io/tcp.rb', line 85 def write(buffer) siz = @io.write_nonblock(buffer) buffer.slice!(0, siz) siz rescue ::IO::WaitWritable 0 rescue EOFError nil end |