@@ -882,21 +882,21 @@ fn linuxLookupName(
882
882
} else {
883
883
try linuxLookupNameFromHosts (addrs , canon , name , family , port );
884
884
if (addrs .items .len == 0 ) {
885
- try linuxLookupNameFromDnsSearch (addrs , canon , name , family , port );
886
- }
887
- if (addrs .items .len == 0 ) {
888
- // RFC 6761 Section 6.3
885
+ // RFC 6761 Section 6.3.3
889
886
// Name resolution APIs and libraries SHOULD recognize localhost
890
887
// names as special and SHOULD always return the IP loopback address
891
888
// for address queries and negative responses for all other query
892
889
// types.
893
890
894
- // Check for equal to "localhost" or ends in ".localhost"
895
- if (mem .endsWith (u8 , name , "localhost" ) and (name .len == "localhost" .len or name [name .len - "localhost" .len ] == '.' )) {
891
+ // Check for equal to "localhost(.)" or ends in ".localhost(.)"
892
+ const localhost = if (name [name .len - 1 ] == '.' ) "localhost." else "localhost" ;
893
+ if (mem .endsWith (u8 , name , localhost ) and (name .len == localhost .len or name [name .len - localhost .len ] == '.' )) {
896
894
try addrs .append (LookupAddr { .addr = .{ .in = Ip4Address .parse ("127.0.0.1" , port ) catch unreachable } });
897
895
try addrs .append (LookupAddr { .addr = .{ .in6 = Ip6Address .parse ("::1" , port ) catch unreachable } });
898
896
return ;
899
897
}
898
+
899
+ try linuxLookupNameFromDnsSearch (addrs , canon , name , family , port );
900
900
}
901
901
}
902
902
} else {
0 commit comments