- /* The [2] is required because we may write a sockaddr_in6 here, and sockaddr_in6 is larger than sockaddr, where sockaddr_in4 is not. */
- socklen_t size = sizeof(sockaddr_in);
- sockaddr* s = new sockaddr[2];
-#ifdef IPV6
- if (v6)
- {
- in6_addr n;
- if (inet_pton(AF_INET6, current_ip.c_str(), &n) > 0)
- {
- memcpy(&((sockaddr_in6*)s)->sin6_addr, &n, sizeof(sockaddr_in6));
- ((sockaddr_in6*)s)->sin6_port = 0;
- ((sockaddr_in6*)s)->sin6_family = AF_INET6;
- size = sizeof(sockaddr_in6);
- }
- else
- {
- // Well, this is as good as it's gonna get.
- errno = EADDRNOTAVAIL;
- delete[] s;
- return false;
- }
- }
- else
-#endif
+ irc::sockets::sockaddrs s;
+ if (!irc::sockets::aptosa(current_ip.c_str(), 0, &s))