Skip to content

Commit

Permalink
Sockets: fix getipaddr() (JuliaLang#56528)
Browse files Browse the repository at this point in the history
  • Loading branch information
barucden authored Nov 15, 2024
1 parent 2d9a2ee commit e5f3010
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
10 changes: 4 additions & 6 deletions stdlib/Sockets/src/addrinfo.jl
Original file line number Diff line number Diff line change
Expand Up @@ -282,16 +282,14 @@ See also [`getipaddrs`](@ref).
"""
function getipaddr(addr_type::Type{T}) where T<:IPAddr
addrs = getipaddrs(addr_type)
isempty(addrs) && error("No networking interface available")

if length(addrs) == 0
error("No networking interface available")
end

# Prefer the first IPv4 address
# When `addr_type` is `IPAddr`, `addrs` contain IP addresses of all types
# In that case, we prefer to return the first IPv4
i = something(findfirst(ip -> ip isa IPv4, addrs), 1)
return addrs[i]
end
getipaddr() = getipaddr(IPv4)
getipaddr() = getipaddr(IPAddr)


"""
Expand Down
25 changes: 20 additions & 5 deletions stdlib/Sockets/test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -639,11 +639,26 @@ end

@testset "getipaddrs" begin
@test getipaddr() in getipaddrs()
try
getipaddr(IPv6) in getipaddrs(IPv6)
catch
if !isempty(getipaddrs(IPv6))
@test "getipaddr(IPv6) errored when it shouldn't have!"

has_ipv4 = !isempty(getipaddrs(IPv4))
if has_ipv4
@test getipaddr(IPv4) in getipaddrs(IPv4)
else
@test_throws "No networking interface available" getipaddr(IPv4)
end

has_ipv6 = !isempty(getipaddrs(IPv6))
if has_ipv6
@test getipaddr(IPv6) in getipaddrs(IPv6)
else
@test_throws "No networking interface available" getipaddr(IPv6)
end

@testset "getipaddr() prefers IPv4 over IPv6" begin
if has_ipv4
@test getipaddr() isa IPv4
else
@test getipaddr() isa IPv6
end
end

Expand Down

0 comments on commit e5f3010

Please sign in to comment.