]> granicus.if.org Git - pdns/commitdiff
dnsdist: In verbose mode, warn if `sendto()`/`sendfromto()` failed
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 9 May 2016 08:09:28 +0000 (10:09 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 9 May 2016 08:09:28 +0000 (10:09 +0200)
pdns/dnsdist.cc

index 750e65a6b1d03e8d0defe91528b24c900c1bd7d5..b21112bd711a36a833d1296c835e5b0bfe3fd785 100644 (file)
@@ -144,10 +144,17 @@ struct DelayedPacket
   ComboAddress origDest;
   void operator()()
   {
-    if(origDest.sin4.sin_family == 0)
-      sendto(fd, packet.c_str(), packet.size(), 0, (struct sockaddr*)&destination, destination.getSocklen());
-    else
-      sendfromto(fd, packet.c_str(), packet.size(), 0, origDest, destination);
+    ssize_t res;
+    if(origDest.sin4.sin_family == 0) {
+      res = sendto(fd, packet.c_str(), packet.size(), 0, (struct sockaddr*)&destination, destination.getSocklen());
+    }
+    else {
+      res = sendfromto(fd, packet.c_str(), packet.size(), 0, origDest, destination);
+    }
+    if (res == -1) {
+      int err = errno;
+      vinfolog("Error sending delayed response to %s: %s", destination.toStringWithPort(), strerror(err));
+    }
   }
 };
 
@@ -313,10 +320,17 @@ static bool sendUDPResponse(int origFD, char* response, uint16_t responseLen, in
     g_delay->submit(dp, delayMsec);
   }
   else {
-    if(origDest.sin4.sin_family == 0)
-      sendto(origFD, response, responseLen, 0, (struct sockaddr*)&origRemote, origRemote.getSocklen());
-    else
-      sendfromto(origFD, response, responseLen, 0, origDest, origRemote);
+    ssize_t res;
+    if(origDest.sin4.sin_family == 0) {
+      res = sendto(origFD, response, responseLen, 0, (struct sockaddr*)&origRemote, origRemote.getSocklen());
+    }
+    else {
+      res = sendfromto(origFD, response, responseLen, 0, origDest, origRemote);
+    }
+    if (res == -1) {
+      int err = errno;
+      vinfolog("Error sending response to %s: %s", origRemote.toStringWithPort(), strerror(err));
+    }
   }
 
   return true;