]> granicus.if.org Git - pdns/commitdiff
Emit warning when socket timestamps cannot be enabled
authorAki Tuomi <cmouse@desteem.org>
Thu, 21 May 2015 19:52:09 +0000 (22:52 +0300)
committerAki Tuomi <cmouse@desteem.org>
Wed, 27 May 2015 16:00:41 +0000 (19:00 +0300)
pdns/dnsdist.cc
pdns/misc.cc
pdns/misc.hh
pdns/nameserver.cc
pdns/pdns_recursor.cc

index 94d7f3fdcab9dc1441dc8411287a3e8bd6c78aa8..b72e55e2e4a74de693afbeb957684f0d3ab4b80d 100644 (file)
@@ -1002,7 +1002,9 @@ try
     //if(g_vm.count("bind-non-local"))
     bindAny(local.sin4.sin_family, cs->udpFD);
 
-    //    setSocketTimestamps(cs->udpFD);
+    //    if (!setSocketTimestamps(cs->udpFD))
+    //      L<<Logger::Warning<<"Unable to enable timestamp reporting for socket"<<endl;
+
 
     if(IsAnyAddress(local)) {
       int one=1;
index 8d3a8b4ba22b920fb68ae1f0a088c0a5cf3cf07d..a05d5652a87f11795bcad3c2c1b882c102f54a31 100644 (file)
@@ -913,13 +913,13 @@ uint32_t burtle(const unsigned char* k, uint32_t length, uint32_t initval)
   return c;
 }
 
-void setSocketTimestamps(int fd)
+bool setSocketTimestamps(int fd)
 {
 #ifdef SO_TIMESTAMP
   int on=1;
-  if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, (char*)&on, sizeof(on)) < 0 )
-    ; // L<<Logger::Error<<"Unable to enable timestamp reporting for socket"<<endl;
+  return setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, (char*)&on, sizeof(on)) == 0;
 #endif
+  return true; // we pretend this happened.
 }
 
 uint32_t pdns_strtoui(const char *nptr, char **endptr, int base)
index 99632853d53cd256e8c9f7922373bfbabab694b2..056bcb6096e8d38829d9a5b9af6fd4dae5b3bacd 100644 (file)
@@ -544,7 +544,7 @@ unsigned int getFilenumLimit(bool hardOrSoft=0);
 void setFilenumLimit(unsigned int lim);
 bool readFileIfThere(const char* fname, std::string* line);
 uint32_t burtle(const unsigned char* k, uint32_t lengh, uint32_t init);
-void setSocketTimestamps(int fd);
+bool setSocketTimestamps(int fd);
 
 //! Sets the socket into blocking mode.
 bool setBlocking( int sock );
index a844766c452caa83da5b0e3787d1a782956d7ef5..7cd2e4a0c658f61ee13c22730c4610268efd53f9 100644 (file)
@@ -118,7 +118,8 @@ void UDPNameserver::bindIPv4()
     if(localname=="0.0.0.0")
       setsockopt(s, IPPROTO_IP, GEN_IP_PKTINFO, &one, sizeof(one));
 
-    setSocketTimestamps(s);
+    if (!setSocketTimestamps(s))
+      L<<Logger::Warning<<"Unable to enable timestamp reporting for socket"<<endl;
 
 #ifdef SO_REUSEPORT
     if( d_can_reuseport )
@@ -223,7 +224,8 @@ void UDPNameserver::bindIPv6()
       setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one));      // if this fails, we report an error in tcpreceiver too
     }
 
-    setSocketTimestamps(s);
+    if (setSocketTimestamps(s))
+      L<<Logger::Warning<<"Unable to enable timestamp reporting for socket"<<endl;
 
 #ifdef SO_REUSEPORT
     if( d_can_reuseport )
index 7ae2b4080123a0b6a2bc40f124451c875147f70a..7fb870fc5981876f0a180e15f5a6dd28d773dbef 100644 (file)
@@ -1183,7 +1183,8 @@ void makeUDPServerSockets()
     if(fd < 0) {
       throw PDNSException("Making a UDP server socket for resolver: "+netstringerror());
     }
-    setSocketTimestamps(fd);
+    if (!setSocketTimestamps(fd))
+      L<<Logger::Warning<<"Unable to enable timestamp reporting for socket"<<endl;
 
     if(IsAnyAddress(sin)) {
       setsockopt(fd, IPPROTO_IP, GEN_IP_PKTINFO, &one, sizeof(one));     // linux supports this, so why not - might fail on other systems