--- libaitio/src/Attic/tools.c 2012/11/16 13:14:11 1.18.4.1 +++ libaitio/src/Attic/tools.c 2012/11/16 13:28:28 1.18.4.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: tools.c,v 1.18.4.1 2012/11/16 13:14:11 misho Exp $ +* $Id: tools.c,v 1.18.4.2 2012/11/16 13:28:28 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -645,21 +645,28 @@ io_gethostbyname(const char *psHost, u_short port, io_ * * @a = 1st address * @b = 2nd address + * @p = compare and ports, if family is AF_INET or AF_INET6 * return: 0 is equal or !=0 is different */ int -io_addrcmp(io_sockaddr_t * __restrict a, io_sockaddr_t * __restrict b) +io_addrcmp(io_sockaddr_t * __restrict a, io_sockaddr_t * __restrict b, int p) { if (a && b && a->sa.sa_family == b->sa.sa_family) switch (a->sa.sa_family) { case AF_LOCAL: return strcmp(a->sun.sun_path, b->sun.sun_path); case AF_INET: - return memcmp(&a->sin.sin_addr, &b->sin.sin_addr, - sizeof a->sin.sin_addr); + if (p && (a->sin.sin_port - b->sin.sin_port)) + return (int) !!(a->sin.sin_port - b->sin.sin_port); + else + return memcmp(&a->sin.sin_addr, &b->sin.sin_addr, + sizeof a->sin.sin_addr); case AF_INET6: - return memcmp(&a->sin6.sin6_addr, &b->sin6.sin6_addr, - sizeof a->sin6.sin6_addr); + if (p && (a->sin6.sin6_port - b->sin6.sin6_port)) + return (int) !!(a->sin6.sin6_port - b->sin6.sin6_port); + else + return memcmp(&a->sin6.sin6_addr, &b->sin6.sin6_addr, + sizeof a->sin6.sin6_addr); case AF_LINK: return memcmp(&a->sdl.sdl_data, &b->sdl.sdl_data, sizeof a->sdl.sdl_data);