[Pdns-dev] recursor going opaque + nonblocking sockets?
bert hubert
ahu at ds9a.nl
Mon Sep 6 17:39:44 CEST 2004
Christopher,
I've fixed your bug #12 (http://ds9a.nl/cgi-bin/cvstrac/pdns/tktview?tn=12)
But I'm wondering about bug #13:
--- pdns-2.9.16.orig/pdns/pdns_recursor.cc +++ pdns-2.9.16/pdns/pdns_recursor.cc
@@ -238,6 +238,8 @@
} if(!tries) throw AhuException("Resolver binding to local socket: "+stringerror());
+ Utility::setNonBlocking(d_clientsock);
}
void makeTCPServerSocket()
@@ -270,6 +272,7 @@
exit(1);
}
+ Utility::setNonBlocking(d_tcpserversock);
listen(d_tcpserversock, 128);
}
@@ -300,6 +303,7 @@
if (bind(d_serversock, (struct sockaddr *)&sin, sizeof(sin))<0)
throw AhuException("Resolver binding to server socket: "+stringerror()); L<<Logger::Error<<"Incoming query source port: "<<arg().asNum("local-port")<<endl;
+ Utility::setNonBlocking(d_serversock); }
Setting d_tcpserversock to nonblocking is indeed recommended by Stevens. If
d_clientsock is unable to ever unable to send, pdns should wait. Not a lot
of reason to barge onwards then as the kernel is then unable to send packets
anyhow.
Same for d_serversock - I'm unaware of there ever being the possibility for
select returning that there is a datagram which there then isn't at read()
time.
I've changed to code to set the tcp server socket to nonblocking, and to be
on the safe side, d_serversock too. I do want to block on d_clientsock.
Thanks!
--
http://www.PowerDNS.com Open source, database driven DNS Software
http://lartc.org Linux Advanced Routing & Traffic Control HOWTO
More information about the Pdns-dev
mailing list