summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/utils.c b/utils.c
index 1fa8621..56b75a5 100644
--- a/utils.c
+++ b/utils.c
@@ -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;
}