]> granicus.if.org Git - pdns/commitdiff
prevent leak of file descriptor if running out of ports for incoming AXFR
authorbert hubert <bert.hubert@netherlabs.nl>
Wed, 19 Dec 2018 09:08:39 +0000 (10:08 +0100)
committeraerique <aerique@xs4all.nl>
Wed, 20 Mar 2019 13:05:02 +0000 (14:05 +0100)
(cherry picked from commit f852aff670c19b7dac9a0cef2c3912ebd8946201)

pdns/resolver.cc

index 51d81160c49af4e11556fa30784d8833b97ee9cc..3c45d44d32edfc74f6c9fd6dab2169dac8b996ff 100644 (file)
@@ -86,10 +86,11 @@ int makeQuerySocket(const ComboAddress& local, bool udpOrTCP, bool nonLocalBind)
   }
   else {
     // tcp, let the kernel figure out the port
-    // cerr<<"letting kernel pick TCP port"<<endl;
     ourLocal.sin4.sin_port = 0;
-    if(::bind(sock, (struct sockaddr *)&ourLocal, ourLocal.getSocklen()) < 0)
+    if(::bind(sock, (struct sockaddr *)&ourLocal, ourLocal.getSocklen()) < 0) {
+      closesocket(sock);
       throw PDNSException("Resolver binding to local TCP socket on "+ourLocal.toString()+": "+stringerror());
+    }
   }
   return sock;
 }