class Mongo::Address
Represents an address to a server, either with an IP address or socket path.
@since 2.0.0
Constants
- FAMILY_MAP
Mapping from socket family to resolver class.
@since 2.0.0
- LOCALHOST
The localhost constant.
@since 2.1.0
Attributes
@return [ String ] host The original host name.
@return [ Integer ] port The port.
@return [ String ] seed The seed address.
Public Class Methods
Initialize the address.
@example Initialize the address with a DNS entry and port.
Mongo::Address.new("app.example.com:27017")
@example Initialize the address with a DNS entry and no port.
Mongo::Address.new("app.example.com")
@example Initialize the address with an IPV4 address and port.
Mongo::Address.new("127.0.0.1:27017")
@example Initialize the address with an IPV4 address and no port.
Mongo::Address.new("127.0.0.1")
@example Initialize the address with an IPV6 address and port.
Mongo::Address.new("[::1]:27017")
@example Initialize the address with an IPV6 address and no port.
Mongo::Address.new("[::1]")
@example Initialize the address with a unix socket.
Mongo::Address.new("/path/to/socket.sock")
@param [ String ] seed The provided address. @param [ Hash ] options The address options.
@since 2.0.0
# File lib/mongo/address.rb, line 119 def initialize(seed, options = {}) @seed = seed @host, @port = parse_host_port @options = options end
Public Instance Methods
Check equality of the address to another.
@example Check address equality.
address == other
@param [ Object ] other The other object.
@return [ true, false ] If the objects are equal.
@since 2.0.0
# File lib/mongo/address.rb, line 61 def ==(other) return false unless other.is_a?(Address) host == other.host && port == other.port end
Connect a socket.
@example Connect a socket.
address.connect_socket!(socket)
@since 2.4.3
# File lib/mongo/address.rb, line 171 def connect_socket!(socket) socket.connect!(connect_timeout) end
Check equality for hashing.
@example Check hashing equality.
address.eql?(other)
@param [ Object ] other The other object.
@return [ true, false ] If the objects are equal.
@since 2.2.0
# File lib/mongo/address.rb, line 76 def eql?(other) self == other end
Calculate the hash value for the address.
@example Calculate the hash value.
address.hash
@return [ Integer ] The hash value.
@since 2.0.0
# File lib/mongo/address.rb, line 88 def hash [ host, port ].hash end
Get a pretty printed address inspection.
@example Get the address inspection.
address.inspect
@return [ String ] The nice inspection string.
@since 2.0.0
# File lib/mongo/address.rb, line 133 def inspect "#<Mongo::Address:0x#{object_id} address=#{to_s}>" end
Get a socket for the provided address, given the options.
@example Get a socket.
address.socket(5, :ssl => true)
@param [ Float ] socket_timeout The socket timeout. @param [ Hash ] ssl_options SSL options.
@return [ Pool::Socket::SSL, Pool::Socket::TCP, Pool::Socket::Unix ] The socket.
@since 2.0.0
# File lib/mongo/address.rb, line 148 def socket(socket_timeout, ssl_options = {}) @resolver ||= initialize_resolver!(ssl_options) @resolver.socket(socket_timeout, ssl_options) end
Get the address as a string.
@example Get the address as a string.
address.to_s
@return [ String ] The nice string.
@since 2.0.0
# File lib/mongo/address.rb, line 161 def to_s port ? "#{host}:#{port}" : host end
Private Instance Methods
# File lib/mongo/address.rb, line 177 def connect_timeout @connect_timeout ||= @options[:connect_timeout] || Server::CONNECT_TIMEOUT end
# File lib/mongo/address.rb, line 181 def initialize_resolver!(ssl_options) return Unix.new(seed.downcase) if seed.downcase =~ Unix::MATCH family = (host == LOCALHOST) ? ::Socket::AF_INET : ::Socket::AF_UNSPEC error = nil ::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).each do |info| begin _host = (host == LOCALHOST) ? info[3] : host res = FAMILY_MAP[info[4]].new(_host, port, host) res.socket(connect_timeout, ssl_options).connect!(connect_timeout).close return res rescue IOError, SystemCallError, Error::SocketTimeoutError, Error::SocketError => e error = e end end raise error end
# File lib/mongo/address.rb, line 199 def parse_host_port address = seed.downcase case address when Unix::MATCH then Unix.parse(address) when IPv6::MATCH then IPv6.parse(address) else IPv4.parse(address) end end