module Moped::Sockets::Connectable
Attributes
Public Class Methods
Source
# File lib/moped/sockets/connectable.rb, line 33 def self.included(klass) klass.send(:extend, ClassMethods) end
Bring in the class methods when included.
@example Extend the class methods.
Connectable.included(class)
@param [ Class ] klass The class including the module.
@since 1.3.0
Public Instance Methods
Source
# File lib/moped/sockets/connectable.rb, line 15 def alive? if Kernel::select([ self ], nil, [ self ], 0) !eof? rescue false else true end rescue IOError false end
Is the socket connection alive?
@example Is the socket alive?
socket.alive?
@return [ true, false ] If the socket is alive.
@since 1.0.0
Source
Source
# File lib/moped/sockets/connectable.rb, line 59 def write(*args) check_if_alive! handle_socket_errors { super } end
Write to the socket.
@example Write to the socket.
socket.write(data)
@param [ Object
] args The data to write.
@return [ Integer
] The number of bytes written.
@since 1.0.0
Private Instance Methods
Source
# File lib/moped/sockets/connectable.rb, line 77 def check_if_alive! unless alive? raise Errors::ConnectionFailure, "Socket connection was closed by remote host" end end
Before performing a read or write operating, ping the server to check if it is alive.
@api private
@example Check if the connection is alive.
connectable.check_if_alive!
@raise [ ConnectionFailure ] If the connectable is not alive.
@since 1.4.0
Source
# File lib/moped/sockets/connectable.rb, line 96 def generate_message(error) "#{host}:#{port}: #{error.class.name} (#{error.errno}): #{error.message}" end
Generate the message for the connection failure based of the system call error, with some added information.
@api private
@example Generate the error message.
connectable.generate_message(error)
@param [ SystemCallError ] error The error.
@return [ String
] The error message.
@since 1.4.0
Source
# File lib/moped/sockets/connectable.rb, line 117 def handle_socket_errors yield rescue Errno::ECONNREFUSED => e raise Errors::ConnectionFailure, generate_message(e) rescue Errno::EHOSTUNREACH => e raise Errors::ConnectionFailure, generate_message(e) rescue Errno::EPIPE => e raise Errors::ConnectionFailure, generate_message(e) rescue Errno::ECONNRESET => e raise Errors::ConnectionFailure, generate_message(e) rescue Errno::ETIMEDOUT => e raise Errors::ConnectionFailure, generate_message(e) rescue IOError raise Errors::ConnectionFailure, "Connection timed out to Mongo on #{host}:#{port}" rescue OpenSSL::SSL::SSLError => e raise Errors::ConnectionFailure, "SSL Error '#{e.to_s}' for connection to Mongo on #{host}:#{port}" end
Handle the potential socket errors that can occur.
@api private
@example Handle the socket errors while executing the block.
handle_socket_errors do socket.read(128) end
@raise [ Moped::Errors::ConnectionFailure
] If a system call error or
IOError occured which can be retried.
@raise [ Moped::Errors::Unrecoverable ] If a system call error occured
which cannot be retried and should be re-raised.
@return [ Object
] The result of the yield.
@since 1.0.0