new(addr = '::', family = Socket::AF_UNSPEC)
public
Creates a new ipaddr containing the
given human readable form of an IP address. It also accepts
`address/prefixlen’ and `address/mask’. When prefixlen or mask is specified, it returns a masked ipaddr.
IPv6 address may beenclosed with `[’ and `]’.
Although an address family is determined automatically from a specified
address, you can specify an address family explicitly by the optional
second argument.
Show source
def initialize(addr = '::', family = Socket::AF_UNSPEC)
if !addr.kind_of?(String)
if family != Socket::AF_INET6 && family != Socket::AF_INET
raise ArgumentError, "unsupported address family"
end
set(addr, family)
@mask_addr = (family == Socket::AF_INET) ? IN4MASK : IN6MASK
return
end
prefix, prefixlen = addr.split('/')
if prefix =~ /^\[(.*)\]$/i
prefix = $1
family = Socket::AF_INET6
end
begin
IPSocket.getaddress(prefix)
rescue
raise ArgumentError, "invalid address"
end
@addr = @family = nil
if family == Socket::AF_UNSPEC || family == Socket::AF_INET
@addr = in_addr(prefix)
if @addr
@family = Socket::AF_INET
end
end
if !@addr && (family == Socket::AF_UNSPEC || family == Socket::AF_INET6)
@addr = in6_addr(prefix)
@family = Socket::AF_INET6
end
if family != Socket::AF_UNSPEC && @family != family
raise ArgumentError, "address family unmatch"
end
if prefixlen
mask!(prefixlen)
else
@mask_addr = (@family == Socket::AF_INET) ? IN4MASK : IN6MASK
end
end