From 3053c9b2a3c20515c906e471d6807cad3b2869ba Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 18 Apr 2024 12:07:43 -0700 Subject: [PATCH] tst_QDnsLookup: use the 4-argument writeDatagram() overload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using writeDatagram(QNetworkDatagram), the sendmsg() call on FreeBSD is failing. It works on Linux and on macOS, so my guess is that IP_PKTINFO works to set the sender address but IP_SENDSRCADDR is not allowed in this context for some reason. Before: recvmsg(5,{{ AF_INET 127.0.0.1:19530 },16,[{"H\M-p\^A\0\0\^A\0\0\0\0\0\^A\tso"...,49}],1,{{level=IPPROTO_IP,type=IP_RECVDSTADDR,data={0x7f,0x00,0x00,0x01}},{level=IPPROTO_IP,type=IP_RECVTTL,data={0x40}}},48,0},0) = 49 (0x31) sendmsg(5,{{ AF_INET 127.0.0.1:19530 },16,[{"H\M-p\M^@\^C\0\^A\0\0\0\0\0\^A\t"...,49}],1,{{level=IPPROTO_IP,type=IP_RECVDSTADDR,data={0x7f,0x00,0x00,0x01}}},24,0},MSG_NOSIGNAL) ERR#22 'Invalid argument' After: recvmsg(5,{{ AF_INET 127.0.0.1:16018 },16,[{"\^U\M-X\^A\0\0\^A\0\0\0\0\0\^A\t"...,49}],1,{{level=IPPROTO_IP,type=IP_RECVDSTADDR,data={0x7f,0x00,0x00,0x01}},{level=IPPROTO_IP,type=IP_RECVTTL,data={0x40}}},48,0},0) = 49 (0x31) sendmsg(5,{{ AF_INET 127.0.0.1:16018 },16,[{"\^U\M-X\M^@\^C\0\^A\0\0\0\0\0\^A"...,49}],1,{},0,0},MSG_NOSIGNAL) = 49 (0x31) Change-Id: I455fe22ef4ad4b2f9b01fffd17c77565e230ce31 Reviewed-by: MÃ¥rten Nordheim (cherry picked from commit 41675df695206d046d4786af142f163dfe9b18dd) Reviewed-by: Qt Cherry-pick Bot --- tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp index 411975c31ad..cd02c494e9e 100644 --- a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp +++ b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp @@ -558,7 +558,8 @@ void tst_QDnsLookup::setNameserverLoopback() QByteArray reply = data; reply[2] = 0x80U; // header->qr = true; reply[3] = 3; // header->rcode = NXDOMAIN; - server.writeDatagram(dgram.makeReply(reply)); + server.writeDatagram(reply.constData(), reply.size(), dgram.senderAddress(), + dgram.senderPort()); server.close(); // now check that the QDnsLookup finished