Browse Source

make sure TCPServer() listens before accepting.
(with additional cleanup: removed unnecessary UNUSED_PARAM, minimize the use
of temporary varaibles)


git-svn-id: svn://bind10.isc.org/svn/bind10/trunk@1524 e5f2f494-b856-4b98-b285-d166d9295462

JINMEI Tatuya 15 years ago
parent
commit
cda0f9afb8
1 changed files with 8 additions and 11 deletions
  1. 8 11
      src/bin/auth/main.cc

+ 8 - 11
src/bin/auth/main.cc

@@ -199,20 +199,18 @@ private:
 class TCPServer {
 public:
     TCPServer(io_service& io_service, int af, short port) :
-        io_service_(io_service),
-        acceptor_(io_service, af == AF_INET6 ? tcp::v6() : tcp::v4()),
+        io_service_(io_service), acceptor_(io_service_),
         listening_(new TCPClient(io_service_))
     {
+        tcp::endpoint endpoint(af == AF_INET6 ? tcp::v6() : tcp::v4(), port);
+        acceptor_.open(endpoint.protocol());
         // Set v6-only (we use a different instantiation for v4,
         // otherwise asio will bind to both v4 and v6
         if (af == AF_INET6) {
-            boost::asio::ip::v6_only option(true);
-            acceptor_.set_option(option);
-            acceptor_.bind(tcp::endpoint(tcp::v6(), port));
-        } else {
-            acceptor_.bind(tcp::endpoint(tcp::v4(), port));
+            acceptor_.set_option(boost::asio::ip::v6_only(true));
         }
-        // XXX: isn't the following exception free?  Need to check it.
+        acceptor_.bind(endpoint);
+        acceptor_.listen();
         acceptor_.async_accept(listening_->getSocket(),
                                boost::bind(&TCPServer::handleAccept, this,
                                            listening_, placeholders::error));
@@ -244,7 +242,7 @@ private:
 
 class UDPServer {
 public:
-    UDPServer(io_service& io_service, int af UNUSED_PARAM, short port UNUSED_PARAM) :
+    UDPServer(io_service& io_service, int af, short port) :
         io_service_(io_service),
         socket_(io_service, af == AF_INET6 ? udp::v6() : udp::v4()),
         response_buffer_(0),
@@ -254,8 +252,7 @@ public:
         // Set v6-only (we use a different instantiation for v4,
         // otherwise asio will bind to both v4 and v6
         if (af == AF_INET6) {
-            boost::asio::ip::v6_only option(true);
-            socket_.set_option(option);
+            socket_.set_option(boost::asio::ip::v6_only(true));
             socket_.bind(udp::endpoint(udp::v6(), port));
         } else {
             socket_.bind(udp::endpoint(udp::v4(), port));