diff options
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 39 |
1 files changed, 30 insertions, 9 deletions
@@ -286,7 +286,8 @@ connect_any(struct cfg *cfg, struct uring_task *task, connect_next(cfg, task, conn); } -uint16_t sockaddr_port(struct sockaddr_in46 *addr) +uint16_t +sockaddr_port(struct sockaddr_in46 *addr) { switch (addr->storage.ss_family) { case AF_INET: @@ -299,23 +300,43 @@ uint16_t sockaddr_port(struct sockaddr_in46 *addr) } char * -sockaddr_to_str(struct sockaddr_in46 *addr, char *buf, size_t buflen) +sockaddr_addr(struct sockaddr_in46 *addr, char *buf, size_t len) +{ + switch (addr->storage.ss_family) { + case AF_INET: + if (inet_ntop(addr->in4.sin_family, &addr->in4.sin_addr, buf, len)) + return buf; + break; + case AF_INET6: + if (inet_ntop(addr->in6.sin6_family, &addr->in6.sin6_addr, buf, len)) + return buf; + break; + default: + break; + } + + snprintf(buf, len, "<unknown>"); + return buf; +} + +char * +sockaddr_to_str(struct sockaddr_in46 *addr, char *buf, size_t len) { char abuf[ADDRSTRLEN]; switch (addr->storage.ss_family) { case AF_INET: - snprintf(buf, buflen, "AF_INET4 %s %u", - inet_ntop(addr->in4.sin_family, &addr->in4.sin_addr, abuf, sizeof(abuf)), - (unsigned)ntohs(addr->in4.sin_port)); + snprintf(buf, len, "AF_INET4 %s %" PRIu16, + sockaddr_addr(addr, abuf, sizeof(abuf)), + sockaddr_port(addr)); break; case AF_INET6: - snprintf(buf, buflen, "AF_INET6 %s %u", - inet_ntop(addr->in6.sin6_family, &addr->in6.sin6_addr, abuf, sizeof(abuf)), - (unsigned)ntohs(addr->in6.sin6_port)); + snprintf(buf, len, "AF_INET6 %s %" PRIu16, + sockaddr_addr(addr, abuf, sizeof(abuf)), + sockaddr_port(addr)); break; default: - snprintf(buf, buflen, "AF_UNKNOWN"); + snprintf(buf, len, "AF_UNKNOWN"); break; } |