Skip to content

Commit e5f3010

Browse files
authored
Sockets: fix getipaddr() (#56528)
1 parent 2d9a2ee commit e5f3010

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

stdlib/Sockets/src/addrinfo.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -282,16 +282,14 @@ See also [`getipaddrs`](@ref).
282282
"""
283283
function getipaddr(addr_type::Type{T}) where T<:IPAddr
284284
addrs = getipaddrs(addr_type)
285+
isempty(addrs) && error("No networking interface available")
285286

286-
if length(addrs) == 0
287-
error("No networking interface available")
288-
end
289-
290-
# Prefer the first IPv4 address
287+
# When `addr_type` is `IPAddr`, `addrs` contain IP addresses of all types
288+
# In that case, we prefer to return the first IPv4
291289
i = something(findfirst(ip -> ip isa IPv4, addrs), 1)
292290
return addrs[i]
293291
end
294-
getipaddr() = getipaddr(IPv4)
292+
getipaddr() = getipaddr(IPAddr)
295293

296294

297295
"""

stdlib/Sockets/test/runtests.jl

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -639,11 +639,26 @@ end
639639

640640
@testset "getipaddrs" begin
641641
@test getipaddr() in getipaddrs()
642-
try
643-
getipaddr(IPv6) in getipaddrs(IPv6)
644-
catch
645-
if !isempty(getipaddrs(IPv6))
646-
@test "getipaddr(IPv6) errored when it shouldn't have!"
642+
643+
has_ipv4 = !isempty(getipaddrs(IPv4))
644+
if has_ipv4
645+
@test getipaddr(IPv4) in getipaddrs(IPv4)
646+
else
647+
@test_throws "No networking interface available" getipaddr(IPv4)
648+
end
649+
650+
has_ipv6 = !isempty(getipaddrs(IPv6))
651+
if has_ipv6
652+
@test getipaddr(IPv6) in getipaddrs(IPv6)
653+
else
654+
@test_throws "No networking interface available" getipaddr(IPv6)
655+
end
656+
657+
@testset "getipaddr() prefers IPv4 over IPv6" begin
658+
if has_ipv4
659+
@test getipaddr() isa IPv4
660+
else
661+
@test getipaddr() isa IPv6
647662
end
648663
end
649664

0 commit comments

Comments
 (0)