-#ifdef IPV6
- if (!memcmp(all_zero, &in6.sin6_addr, 16))
- {
- sprintf(buffer, "*:%u", ntohs(in6.sin6_port));
- }
- else
-#endif
- {
- buffer[0] = '[';
- if (!inet_ntop(AF_INET6, &in6.sin6_addr, buffer+1, MAXBUF - 10))
- return "<unknown>"; // should never happen, buffer is large enough
- int len = strlen(buffer);
- // no need for snprintf, buffer has at least 9 chars left, max short len = 5
- sprintf(buffer + len, "]:%u", ntohs(in6.sin6_port));
- }
+ case AF_INET:
+ char ip4addr[INET_ADDRSTRLEN];
+ if (!inet_ntop(AF_INET, (void*)&in4.sin_addr, ip4addr, sizeof(ip4addr)))
+ strcpy(ip4addr, "0.0.0.0");
+ return InspIRCd::Format("%s:%u", ip4addr, ntohs(in4.sin_port));
+
+ case AF_INET6:
+ char ip6addr[INET6_ADDRSTRLEN];
+ if (!inet_ntop(AF_INET6, (void*)&in6.sin6_addr, ip6addr, sizeof(ip6addr)))
+ strcpy(ip6addr, "0:0:0:0:0:0:0:0");
+ return InspIRCd::Format("[%s]:%u", ip6addr, ntohs(in6.sin6_port));
+
+ case AF_UNIX:
+ return un.sun_path;