Parcourir la source

[3730] Method to open sockets closes sockets before configuring IfaceMgr.

Previously, the sockets were closed just before opening a new set of
sockets, rather than before reconfiguring the IfaceMgr. Some steps of the
IfaceMgr reconfiguration failed when sockets were still open, which
effectively led to inability to reconfigure the running server.
Marcin Siodelski il y a 10 ans
Parent
commit
d1968dcc2a
1 fichiers modifiés avec 3 ajouts et 3 suppressions
  1. 3 3
      src/lib/dhcpsrv/cfg_iface.cc

+ 3 - 3
src/lib/dhcpsrv/cfg_iface.cc

@@ -65,6 +65,9 @@ CfgIface::openSockets(const uint16_t family, const uint16_t port,
     // inactive.
     setState(family, !wildcard_used_, true);
     IfaceMgr& iface_mgr = IfaceMgr::instance();
+    // Close any open sockets because we're going to modify some properties
+    // of the IfaceMgr. Those modifications require that sockets are closed.
+    closeSockets();
     // Remove selection of unicast addresses from all interfaces.
     iface_mgr.clearUnicasts();
     // For the DHCPv4 server, if the user has selected that raw sockets
@@ -127,9 +130,6 @@ CfgIface::openSockets(const uint16_t family, const uint16_t port,
         }
     }
 
-    // Before opening any sockets, close existing ones.
-    closeSockets();
-
     // Set the callback which is called when the socket fails to open
     // for some specific interface. This callback will simply log a
     // warning message.