module Aerospike::Socket::Base
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/aerospike/socket/base.rb, line 23 def initialize(*args) super(*args) @timeout = nil end
Public Instance Methods
alive?()
click to toggle source
Returns whether the connection to the server is alive.
It is useful to call this method before making a call to the server that would change data on the server.
Note: This method is only useful if the server closed the connection or if a previous connection failure occurred. If the server is hard killed this will still return true until one or more writes are attempted.
# File lib/aerospike/socket/base.rb, line 73 def alive? return false if closed? if IO.select([self], nil, nil, 0) !eof? rescue false else true end rescue IOError false end
close()
click to toggle source
Calls superclass method
# File lib/aerospike/socket/base.rb, line 85 def close return if closed? super() end
connected?()
click to toggle source
# File lib/aerospike/socket/base.rb, line 61 def connected? !closed? end
read(buffer, length, offset = 0)
click to toggle source
# File lib/aerospike/socket/base.rb, line 28 def read(buffer, length, offset = 0) bytes_read = 0 until bytes_read >= length result = read_from_socket(length - bytes_read) buffer.write_binary(result, offset + bytes_read) bytes_read += result.bytesize end bytes_read end
read_from_socket(length)
click to toggle source
# File lib/aerospike/socket/base.rb, line 38 def read_from_socket(length) with_timeout(@timeout) do read_nonblock(length) end end
timeout=(timeout)
click to toggle source
# File lib/aerospike/socket/base.rb, line 57 def timeout=(timeout) @timeout = timeout && timeout > 0 ? timeout : nil end
write(buffer, length)
click to toggle source
# File lib/aerospike/socket/base.rb, line 44 def write(buffer, length) bytes_written = 0 until bytes_written >= length bytes_written += write_to_socket(buffer.read(bytes_written, length - bytes_written)) end end
write_to_socket(data)
click to toggle source
# File lib/aerospike/socket/base.rb, line 51 def write_to_socket(data) with_timeout(@timeout) do write_nonblock(data) end end
Private Instance Methods
with_timeout(timeout, &block)
click to toggle source
Note: For SSL
connections, read_nonblock may invoke write system call, which may raise IO::WaitWritable, and vice versa, due to SSL
renegotiation, so we should always rescue both.
# File lib/aerospike/socket/base.rb, line 95 def with_timeout(timeout, &block) block.call rescue IO::WaitReadable => e if IO::select([self], nil, nil, timeout) retry else fail Aerospike::Exceptions::Connection, "Socket timeout: #{e}" end rescue IO::WaitWritable => e if IO::select(nil, [self], nil, timeout) retry else fail Aerospike::Exceptions::Connection, "Socket timeout: #{e}" end rescue => e raise Aerospike::Exceptions::Connection, "Socket error: #{e}" end