From: Bert Hubert Date: Wed, 3 Oct 2012 19:20:47 +0000 (+0000) Subject: remove last use of select() so we can make the owner of ticket 408 happy and launch... X-Git-Tag: auth-3.2-rc1~142 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e24224638eb866d81a7e642715803c1fb4900de;p=thirdparty%2Fpdns.git remove last use of select() so we can make the owner of ticket 408 happy and launch on 10k IP addresses! git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2740 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/nameserver.cc b/pdns/nameserver.cc index 60affa1440..34ea30df8b 100644 --- a/pdns/nameserver.cc +++ b/pdns/nameserver.cc @@ -125,7 +125,11 @@ void UDPNameserver::bindIPv4() d_highfd=max(s,d_highfd); d_sockets.push_back(s); L< +# include # include # include # include @@ -31,6 +31,7 @@ #endif // WIN32 #include +#include #include "statbag.hh" #include "namespaces.hh" @@ -79,7 +80,7 @@ private: vector d_sockets; void bindIPv4(); void bindIPv6(); - fd_set d_rfds; + vector d_rfds; int d_highfd; }; @@ -96,13 +97,16 @@ inline DNSPacket *UDPNameserver::receive(DNSPacket *prefilled) memset( &remote, 0, sizeof( remote )); addrlen=sizeof(remote); if(d_sockets.size()>1) { - fd_set rfds=d_rfds; + BOOST_FOREACH(struct pollfd &pfd, d_rfds) { + pfd.events = POLL_IN; + pfd.revents = 0; + } - select(d_highfd+1, &rfds, 0, 0, 0); // blocks - - for(vector::const_iterator i=d_sockets.begin();i!=d_sockets.end();++i) { - if(FD_ISSET(*i, &rfds)) { - sock=*i; + poll(&d_rfds[0], d_rfds.size(), -1); + + BOOST_FOREACH(struct pollfd &pfd, d_rfds) { + if(pfd.revents & POLL_IN) { + sock=pfd.fd; addrlen=sizeof(remote); len=0;