]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Socket: Return the remote peer from Socket::recvFromAsync
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 22 Dec 2023 16:10:45 +0000 (17:10 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 22 Dec 2023 16:10:45 +0000 (17:10 +0100)
pdns/dnsreplay.cc
pdns/sstuff.hh

index 1ba97da20440d825a4ff23cf45f2b4b2b04d47c9..66d2fcb95885a5d5ebb8f168bb18aa59470a567b 100644 (file)
@@ -394,7 +394,7 @@ try
   if(res < 0 || res==0)
     return;
 
-  while(s_socket->recvFromAsync(packet)) {
+  while (s_socket->recvFromAsync(packet, remote)) {
     try {
       s_weanswers++;
       MOADNSParser mdp(false, packet.c_str(), packet.length());
index 208697cc2bb8e6dd501fba855082cec2414598ab..f0b186626216298c3506c7a78e2f57b83066655b 100644 (file)
@@ -184,19 +184,16 @@ public:
     dgram.assign(d_buffer, 0, static_cast<size_t>(bytes));
   }
 
-  bool recvFromAsync(string &dgram)
+  bool recvFromAsync(string& dgram, ComboAddress& remote)
   {
-    struct sockaddr_in remote;
     socklen_t remlen = sizeof(remote);
-    ssize_t bytes;
     d_buffer.resize(s_buflen);
-    if((bytes=recvfrom(d_socket, &d_buffer[0], s_buflen, 0, reinterpret_cast<sockaddr *>(&remote), &remlen))<0) {
-      if(errno!=EAGAIN) {
-        throw NetworkError("After async recvfrom: "+stringerror());
-      }
-      else {
-        return false;
+    const auto bytes = recvfrom(d_socket, d_buffer.data(), s_buflen, 0, reinterpret_cast<sockaddr *>(&remote), &remlen);
+    if (bytes < 0) {
+      if (errno != EAGAIN) {
+        throw NetworkError("After async recvfrom: " + stringerror());
       }
+      return false;
     }
     dgram.assign(d_buffer, 0, static_cast<size_t>(bytes));
     return true;