This change allows IPv6 addresses to be ignored by passing false as a second parameter to getaddress()

git-svn-id: file:///home/svn/framework3/trunk@10761 4d416f70-5f16-0410-b530-b9f4589650da
unstable
HD Moore 2010-10-20 01:27:00 +00:00
parent cafb8d1ac2
commit 182943fe6c
1 changed files with 24 additions and 2 deletions

View File

@ -138,9 +138,31 @@ module Socket
# These calls can be quite slow. This also fixes an issue with the
# Resolv.getaddress() call being non-functional on Ruby 1.9.1 (Win32).
#
def self.getaddress(addr)
def self.getaddress(addr, accept_ipv6 = true)
begin
dotted_ip?(addr) ? addr : self.addr_ntoa( ::Socket.gethostbyname(addr)[3] )
if dotted_ip?(addr)
return addr
end
res = ::Socket.gethostbyname(addr)
return nil if not res
# Shift the first three elements out
rname = res.shift
ralias = res.shift
rtype = res.shift
# Reject IPv6 addresses if we don't accept them
if not accept_ipv6
res.reject!{|nbo| nbo.length != 4}
end
# Make sure we have at least one name
return nil if res.length == 0
# Return the first address of the result
self.addr_ntoa( res[0] )
rescue ::ArgumentError # Win32 bug
nil
end