From 70f6ad56edb838e01d267c2b1b74c34b1f4b5770 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Thu, 19 Jun 2025 16:13:10 +0800 Subject: [PATCH] getIpaddrByName: normalize ip addr when input addr is IPv4 or IPv6 --- HISTORY | 3 +++ src/sockopt.c | 37 +++++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/HISTORY b/HISTORY index e8b161f..0d98820 100644 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,7 @@ +Version 1.78 2025-06-19 + * getIpaddrByName: normalize ip addr when input addr is IPv4 or IPv6 + Version 1.77 2025-03-18 * impl. shorten_path for /./ and /../ * add function fc_compare_int64_ptr diff --git a/src/sockopt.c b/src/sockopt.c index ccdc9f4..59c9ad9 100644 --- a/src/sockopt.c +++ b/src/sockopt.c @@ -1208,26 +1208,35 @@ in_addr_64_t getIpaddrByNameEx(const char *name, char *buff, struct in6_addr addr6; in_addr_64_t ip_addr; - if ((*name >= '0' && *name <= '9') && + if (strchr(name, ':') != NULL) //IPv6 + { + if (strchr(name, '%') == NULL && + inet_pton(AF_INET6, name, &addr6) == 1) + { + if (buff != NULL) + { + if (inet_ntop(AF_INET6, &addr6, buff, bufferSize) == NULL) + { + *buff = '\0'; + } + } + *af = AF_INET6; + return *((in_addr_64_t *)((char *)&addr6 + 8)); + } + } + else if ((*name >= '0' && *name <= '9') && inet_pton(AF_INET, name, &addr4) == 1) { if (buff != NULL) { - snprintf(buff, bufferSize, "%s", name); + if (inet_ntop(AF_INET, &addr4, buff, bufferSize) == NULL) + { + *buff = '\0'; + } } *af = AF_INET; return addr4.s_addr; } - if (strchr(name, ':') != NULL && inet_pton( - AF_INET6, name, &addr6) == 1) - { - if (buff != NULL) - { - snprintf(buff, bufferSize, "%s", name); - } - *af = AF_INET6; - return *((in_addr_64_t *)((char *)&addr6 + 8)); - } memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; // 支持IPv4和IPv6 @@ -2180,10 +2189,10 @@ int tcpprintkeepalive(int fd) return errno != 0 ? errno : EINVAL; } - logInfo("keepAlive=%d, keepIdle=%d, keepInterval=%d, keepCount=%d", + logDebug("keepAlive=%d, keepIdle=%d, keepInterval=%d, keepCount=%d", keepAlive, keepIdle, keepInterval, keepCount); #else - logInfo("keepAlive=%d", keepAlive); + logDebug("keepAlive=%d", keepAlive); #endif return 0;