Class: Excon::Socket
- Inherits:
-
Object
- Object
- Excon::Socket
- Extended by:
- Forwardable
- Includes:
- Utils
- Defined in:
- lib/excon/socket.rb
Direct Known Subclasses
Constant Summary collapse
- CONNECT_RETRY_EXCEPTION_CLASSES =
read/write drawn from github.com/ruby-amqp/bunny/commit/75d9dd79551b31a5dd3d1254c537bad471f108cf
if defined?(IO::EINPROGRESSWaitWritable) # Ruby >= 2.1 [Errno::EINPROGRESS, IO::EINPROGRESSWaitWritable] else # Ruby <= 2.0 [Errno::EINPROGRESS] end
- READ_RETRY_EXCEPTION_CLASSES =
Ruby >= 2.1
if defined?(IO::EAGAINWaitReadable) # Ruby >= 2.1 [Errno::EAGAIN, Errno::EWOULDBLOCK, IO::WaitReadable, IO::EAGAINWaitReadable, IO::EWOULDBLOCKWaitReadable] else # Ruby <= 2.0 [Errno::EAGAIN, Errno::EWOULDBLOCK, IO::WaitReadable] end
- WRITE_RETRY_EXCEPTION_CLASSES =
Ruby >= 2.1
if defined?(IO::EAGAINWaitWritable) # Ruby >= 2.1 [Errno::EAGAIN, Errno::EWOULDBLOCK, IO::WaitWritable, IO::EAGAINWaitWritable, IO::EWOULDBLOCKWaitWritable] else # Ruby <= 2.0 [Errno::EAGAIN, Errno::EWOULDBLOCK, IO::WaitWritable] end
- OPERATION_TO_TIMEOUT =
Maps a socket operation to a timeout property.
{ :connect_read => :connect_timeout, :connect_write => :connect_timeout, :read => :read_timeout, :write => :write_timeout }.freeze
Constants included from Utils
Utils::CONTROL, Utils::DELIMS, Utils::ESCAPED, Utils::NONASCII, Utils::UNESCAPED, Utils::UNWISE
Instance Attribute Summary collapse
-
#data ⇒ Object
Returns the value of attribute data.
-
#remote_ip ⇒ Object
readonly
Returns the value of attribute remote_ip.
Instance Method Summary collapse
-
#initialize(data = {}) ⇒ Socket
constructor
A new instance of Socket.
- #local_address ⇒ Object
- #local_port ⇒ Object
- #params ⇒ Object
- #params=(new_params) ⇒ Object
- #read(max_length = nil) ⇒ Object
- #readline ⇒ Object
- #write(data) ⇒ Object
Methods included from Utils
#binary_encode, #connection_uri, #escape_uri, #headers_hash_to_s, #port_string, #query_string, #redact, #request_uri, #split_header_value, #unescape_form, #unescape_uri
Constructor Details
#initialize(data = {}) ⇒ Socket
Returns a new instance of Socket.
51 52 53 54 55 56 57 58 59 |
# File 'lib/excon/socket.rb', line 51 def initialize(data = {}) @data = data @nonblock = data[:nonblock] @port ||= @data[:port] || 80 @read_buffer = String.new @eof = false @backend_eof = false connect end |
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
10 11 12 |
# File 'lib/excon/socket.rb', line 10 def data @data end |
#remote_ip ⇒ Object (readonly)
Returns the value of attribute remote_ip.
46 47 48 |
# File 'lib/excon/socket.rb', line 46 def remote_ip @remote_ip end |
Instance Method Details
#local_address ⇒ Object
108 109 110 |
# File 'lib/excon/socket.rb', line 108 def local_address unpacked_sockaddr[1] end |
#local_port ⇒ Object
112 113 114 |
# File 'lib/excon/socket.rb', line 112 def local_port unpacked_sockaddr[0] end |
#params ⇒ Object
36 37 38 39 |
# File 'lib/excon/socket.rb', line 36 def params Excon.display_warning('Excon::Socket#params is deprecated use Excon::Socket#data instead.') @data end |
#params=(new_params) ⇒ Object
41 42 43 44 |
# File 'lib/excon/socket.rb', line 41 def params=(new_params) Excon.display_warning('Excon::Socket#params= is deprecated use Excon::Socket#data= instead.') @data = new_params end |
#read(max_length = nil) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/excon/socket.rb', line 61 def read(max_length = nil) if @eof return max_length ? nil : '' elsif @nonblock read_nonblock(max_length) else read_block(max_length) end end |
#readline ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/excon/socket.rb', line 71 def readline if @nonblock result = String.new block = @read_buffer @read_buffer = String.new loop do idx = block.index("\n") if idx.nil? result << block else result << block.slice!(0, idx+1) add_to_read_buffer(block) break end block = read_nonblock(@data[:chunk_size]) || raise(EOFError) end result else # nonblock/legacy begin Timeout.timeout(@data[:read_timeout]) do @socket.readline end rescue Timeout::Error raise Excon::Errors::Timeout.new('read timeout reached') end end end |
#write(data) ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/excon/socket.rb', line 100 def write(data) if @nonblock write_nonblock(data) else write_block(data) end end |