]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
ok, so it turns out that poll, select and a few other system calls can return EINTR...
authorbert hubert <bert.hubert@netherlabs.nl>
Mon, 16 Dec 2013 12:19:52 +0000 (13:19 +0100)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Tue, 17 Dec 2013 08:59:08 +0000 (09:59 +0100)
pdns/nameserver.cc

index 3efe3ca7c26570b898e7b3e9ebd87a180b780e21..aaa7c56a23bc0165399308f59baeeefc1391f40b 100644 (file)
@@ -383,9 +383,14 @@ DNSPacket *UDPNameserver::receive(DNSPacket *prefilled)
     pfd.revents = 0;
   }
     
+  retry:;
+  
   err = poll(&rfds[0], rfds.size(), -1);
-  if(err < 0)
+  if(err < 0) {
+    if(errno==EINTR)
+      goto retry;
     unixDie("Unable to poll for new UDP events");
+  }
     
   BOOST_FOREACH(struct pollfd &pfd, rfds) {
     if(pfd.revents & POLLIN) {