]> granicus.if.org Git - pdns/commitdiff
add self-test to epoll to detect non-supported kernels better
authorBert Hubert <bert.hubert@netherlabs.nl>
Fri, 21 Apr 2006 21:02:59 +0000 (21:02 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Fri, 21 Apr 2006 21:02:59 +0000 (21:02 +0000)
improve error loggig

git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@758 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/epollmplexer.cc
pdns/pdns_recursor.cc

index d1cbcb72f91c0d46af27564c054e5d0134c60d22..9bf7866ae3149cbc475451aa456c391ff463e3c5 100644 (file)
@@ -55,6 +55,20 @@ EpollFDMultiplexer::EpollFDMultiplexer() : d_eevents(new epoll_event[s_maxevents
   d_epollfd=epoll_create(s_maxevents); // not hard max
   if(d_epollfd < 0)
     throw FDMultiplexerException("Setting up epoll: "+stringerror());
+  int fd=socket(AF_INET, SOCK_DGRAM, 0); // for self-test
+  if(fd < 0)
+    return;
+  try {
+    addReadFD(fd, 0);
+    removeReadFD(fd);
+    close(fd);
+    return;
+  }
+  catch(FDMultiplexerException &fe) {
+    close(fd);
+    throw FDMultiplexerException("epoll multiplexer failed self-test: "+string(fe.what()));
+  }
+    
 }
 
 void EpollFDMultiplexer::addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toDo, const boost::any& parameter)
index a1307c786c0c6e582a050025cbad2f80a8cbba8e..a649d82d4ea6b758970fc8779b7e31dcee59c1c9 100644 (file)
@@ -819,7 +819,7 @@ void makeUDPServerSockets()
 
     int socklen=sin.sin4.sin_family==AF_INET ? sizeof(sin.sin4) : sizeof(sin.sin6);
     if (::bind(fd, (struct sockaddr *)&sin, socklen)<0) 
-      throw AhuException("Resolver binding to server socket for "+*i+": "+stringerror());
+      throw AhuException("Resolver binding to server socket on port "+::arg()["local-port"]+" for "+*i+": "+stringerror());
     
     Utility::setNonBlocking(fd);
     //    g_fdm->addReadFD(fd, handleNewUDPQuestion);
@@ -1135,8 +1135,12 @@ FDMultiplexer* getMultiplexer()
       L<<Logger::Error<<"Enabled '"<<ret->getName()<<"' multiplexer"<<endl;
       return ret;
     }
-    catch(...)
-      {}
+    catch(FDMultiplexerException &fe) {
+      L<<Logger::Error<<"Non-fatal error initializing possible multiplexer: "<<fe.what()<<endl;
+    }
+    catch(...) {
+      L<<Logger::Error<<"Non-fatal error initializing possible multiplexer"<<endl;
+    }
   }
   L<<Logger::Error<<"No working multiplexer found!"<<endl;
   exit(1);