]> granicus.if.org Git - pdns/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)
committerbert hubert <bert.hubert@netherlabs.nl>
Mon, 16 Dec 2013 12:19:52 +0000 (13:19 +0100)
pdns/nameserver.cc

index 9c9eddf3267142f56c06a0db3e7e99172f0bc93f..39c85a83a1c9bcc2d418b2ed0d4e37fb1505ec2c 100644 (file)
@@ -410,9 +410,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) {