From: Marcin Siodelski Date: Wed, 21 Jun 2017 17:16:28 +0000 (+0200) Subject: [5317] Use ASIO unix domain sockets in DHCPv6 server. X-Git-Tag: trac5227_base~26^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03d3566dcef0fd441607f7bf3579a9492262e27e;p=thirdparty%2Fkea.git [5317] Use ASIO unix domain sockets in DHCPv6 server. --- diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc index d5c572c094..87bf60bfde 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc +++ b/src/bin/dhcp6/ctrl_dhcp6_srv.cc @@ -615,8 +615,12 @@ ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port) } server_ = this; // remember this instance for use in callback + // TimerMgr uses IO service to run asynchronous timers. TimerMgr::instance()->setIOService(getIOService()); + // CommandMgr uses IO service to run asynchronous socket operations. + CommandMgr::instance().setIOService(getIOService()); + // These are the commands always supported by the DHCPv6 server. // Please keep the list in alphabetic order. CommandMgr::instance().registerCommand("build-report", diff --git a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc index f325ab3e6b..481384ebe0 100644 --- a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc @@ -114,6 +114,14 @@ public: reset(); }; + /// @brief Returns pointer to the server's IO service. + /// + /// @return Pointer to the server's IO service or null pointer if the server + /// hasn't been created. + IOServicePtr getIOService() { + return (server_ ? server_->getIOService() : IOServicePtr()); + } + void createUnixChannelServer() { static_cast(::remove(socket_path_.c_str())); @@ -196,11 +204,13 @@ public: // detect the control socket connect and call the accept handler ASSERT_TRUE(client->connectToServer(socket_path_)); ASSERT_NO_THROW(server_->receivePacket(0)); + ASSERT_NO_THROW(getIOService()->run_one()); // Send the command and then call server's receivePacket() so it can // detect the inbound data and call the read handler ASSERT_TRUE(client->sendCommand(command)); ASSERT_NO_THROW(server_->receivePacket(0)); + ASSERT_NO_THROW(getIOService()->run_one()); // Read the response generated by the server. Note that getResponse // only fails if there an IO error or no response data was present. @@ -210,6 +220,8 @@ public: // Now disconnect and process the close event client->disconnectFromServer(); ASSERT_NO_THROW(server_->receivePacket(0)); + + ASSERT_NO_THROW(getIOService()->poll()); } /// @brief Checks response for list-commands