+
+ std::vector<ListenSocket*>::iterator n = ports.begin();
+ for (std::vector<ListenSocket*>::iterator o = old_ports.begin(); o != old_ports.end(); ++o)
+ {
+ while (n != ports.end() && *n != *o)
+ n++;
+ if (n == ports.end())
+ {
+ this->Logs->Log("SOCKET", LOG_DEFAULT, "Port bindings slipped out of vector, aborting close!");
+ break;
+ }
+
+ this->Logs->Log("SOCKET", LOG_DEFAULT, "Port binding %s was removed from the config file, closing.",
+ (**n).bind_desc.c_str());
+ delete *n;
+
+ // this keeps the iterator valid, pointing to the next element
+ n = ports.erase(n);
+ }
+
+ return bound;
+}
+
+bool irc::sockets::aptosa(const std::string& addr, int port, irc::sockets::sockaddrs& sa)
+{
+ memset(&sa, 0, sizeof(sa));
+ if (addr.empty() || addr.c_str()[0] == '*')