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
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.
- #legacy_readline ⇒ Object
- #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, #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.
41 42 43 44 45 46 47 48 |
# File 'lib/excon/socket.rb', line 41 def initialize(data = {}) @data = data @nonblock = data[:nonblock] @port ||= @data[:port] || 80 @read_buffer = String.new @eof = false connect end |
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
8 9 10 |
# File 'lib/excon/socket.rb', line 8 def data @data end |
#remote_ip ⇒ Object (readonly)
Returns the value of attribute remote_ip.
37 38 39 |
# File 'lib/excon/socket.rb', line 37 def remote_ip @remote_ip end |
Instance Method Details
#legacy_readline ⇒ Object
77 78 79 80 81 82 83 84 85 |
# File 'lib/excon/socket.rb', line 77 def legacy_readline begin Timeout.timeout(@data[:read_timeout]) do @socket.readline end rescue Timeout::Error raise Excon::Errors::Timeout.new('read timeout reached') end end |
#local_address ⇒ Object
95 96 97 |
# File 'lib/excon/socket.rb', line 95 def local_address unpacked_sockaddr[1] end |
#local_port ⇒ Object
99 100 101 |
# File 'lib/excon/socket.rb', line 99 def local_port unpacked_sockaddr[0] end |
#params ⇒ Object
27 28 29 30 |
# File 'lib/excon/socket.rb', line 27 def params Excon.display_warning('Excon::Socket#params is deprecated use Excon::Socket#data instead.') @data end |
#params=(new_params) ⇒ Object
32 33 34 35 |
# File 'lib/excon/socket.rb', line 32 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
50 51 52 53 54 55 56 57 58 |
# File 'lib/excon/socket.rb', line 50 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
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/excon/socket.rb', line 60 def readline return legacy_readline if RUBY_VERSION.to_f <= 1.8_7 buffer = String.new begin buffer << @socket.read_nonblock(1) while buffer[-1] != "\n" buffer rescue *READ_RETRY_EXCEPTION_CLASSES select_with_timeout(@socket, :read) && retry rescue OpenSSL::SSL::SSLError => error if error. == 'read would block' select_with_timeout(@socket, :read) && retry else raise(error) end end end |
#write(data) ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/excon/socket.rb', line 87 def write(data) if @nonblock write_nonblock(data) else write_block(data) end end |