diff options
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 29 |
1 files changed, 26 insertions, 3 deletions
@@ -196,14 +196,14 @@ connection_set_local(struct cfg *cfg, struct connection *conn, int fd) &conn->local.addrlen) < 0) sprintf(conn->local.addrstr, "<unknown>"); else - saddr_set_str(&conn->local); + saddr_set_addrstr(&conn->local); } void connection_set_remote(struct cfg *cfg, struct connection *conn, struct saddr *remote) { conn->remote = *remote; - saddr_set_str(&conn->remote); + saddr_set_addrstr(&conn->remote); } static void connect_next(struct cfg *cfg, struct uring_task *task, struct connection *conn); @@ -322,7 +322,30 @@ saddr_addr(struct saddr *saddr, char *buf, size_t len) } void -saddr_set_str(struct saddr *saddr) +saddr_set_ipv4(struct saddr *saddr, in_addr_t ip, in_port_t port) +{ + memset(&saddr->in4, 0, sizeof(saddr->in4)); + saddr->in4.sin_family = AF_INET; + saddr->in4.sin_port = port; + saddr->in4.sin_addr.s_addr = ip; + saddr->addrlen = sizeof(saddr->in4); + saddr_set_addrstr(saddr); +} + +void +saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, in_port_t port) +{ + memset(&saddr->in6, 0, sizeof(saddr->in6)); + saddr->in6.sin6_family = AF_INET6; + saddr->in6.sin6_port = port; + if (ip) + saddr->in6.sin6_addr = *ip; + saddr->addrlen = sizeof(saddr->in6); + saddr_set_addrstr(saddr); +} + +void +saddr_set_addrstr(struct saddr *saddr) { char abuf[ADDRSTRLEN]; |