- /* Port -1: Means UDP IPV4 port binding - Special case
- * used by DNS engine.
- */
- servaddr.in4.sin_family = AF_INET;
- servaddr.in4.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.in4.sin_port = 0;
- size = sizeof(sockaddr_in);
+ 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_sa.str().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] == '*')
+ {
+ if (ServerInstance->Config->WildcardIPv6)
+ {
+ sa.in6.sin6_family = AF_INET6;
+ sa.in6.sin6_port = htons(port);