diff --git a/lib/core/ogs-sockaddr.c b/lib/core/ogs-sockaddr.c index c609412f1..cf05c7829 100644 --- a/lib/core/ogs-sockaddr.c +++ b/lib/core/ogs-sockaddr.c @@ -416,17 +416,23 @@ bool ogs_sockaddr_is_equal(void *p, void *q) if (a->ogs_sa_family != b->ogs_sa_family) return false; - if (a->ogs_sa_family == AF_INET && memcmp( - &a->sin.sin_addr, &b->sin.sin_addr, sizeof(struct in_addr)) == 0) + switch (a->ogs_sa_family) { + case AF_INET: + if (a->sin.sin_port != b->sin.sin_port) + return false; + if (memcmp(&a->sin.sin_addr, &b->sin.sin_addr, sizeof(struct in_addr)) != 0) + return false; return true; - else if (a->ogs_sa_family == AF_INET6 && memcmp( - &a->sin6.sin6_addr, &b->sin6.sin6_addr, sizeof(struct in6_addr)) == 0) + case AF_INET6: + if (a->sin6.sin6_port != b->sin6.sin6_port) + return false; + if (memcmp(&a->sin6.sin6_addr, &b->sin6.sin6_addr, sizeof(struct in6_addr)) != 0) + return false; return true; - else { - return false; + default: + ogs_error("Unexpected address faimily %u", a->ogs_sa_family); + ogs_abort(); } - - return false; } static int parse_network(ogs_ipsubnet_t *ipsub, const char *network) diff --git a/lib/sbi/client.c b/lib/sbi/client.c index d88abd2a2..1f9418599 100644 --- a/lib/sbi/client.c +++ b/lib/sbi/client.c @@ -169,8 +169,7 @@ ogs_sbi_client_t *ogs_sbi_client_find(ogs_sockaddr_t *addr) ogs_assert(addr); ogs_list_for_each(&ogs_sbi_self()->client_list, client) { - if (ogs_sockaddr_is_equal(client->node.addr, addr) == true && - OGS_PORT(client->node.addr) == OGS_PORT(addr)) + if (ogs_sockaddr_is_equal(client->node.addr, addr) == true) break; }