diff --git a/src/posix/platform/resolver.cpp b/src/posix/platform/resolver.cpp index ffd74ec51..a9fcbe10d 100644 --- a/src/posix/platform/resolver.cpp +++ b/src/posix/platform/resolver.cpp @@ -231,8 +231,8 @@ otError Resolver::SendQueryToServer(Transaction *aTxn, { otError error = OT_ERROR_NONE; otIp4Address ip4Addr; - sockaddr_in serverAddr4; - sockaddr_in6 serverAddr6; + sockaddr_in serverAddr4 = {}; + sockaddr_in6 serverAddr6 = {}; if (otIp4FromIp4MappedIp6Address(&aServerAddress, &ip4Addr) == OT_ERROR_NONE) { @@ -249,6 +249,11 @@ otError Resolver::SendQueryToServer(Transaction *aTxn, memcpy(&serverAddr6.sin6_addr, &aServerAddress, sizeof(otIp6Address)); serverAddr6.sin6_family = AF_INET6; serverAddr6.sin6_port = htons(53); + if (IsIp6AddressLinkLocal(aServerAddress)) + { + // Network interface index is required for link local destinations + serverAddr6.sin6_scope_id = otSysGetInfraNetifIndex(); + } VerifyOrExit(sendto(aTxn->mUdpFd6, aPacket, aLength, MSG_DONTWAIT, reinterpret_cast(&serverAddr6), sizeof(serverAddr6)) > 0,