From 5618afabbb7b75a47bfed6bcab02583d05ee5a6d Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Thu, 23 Nov 2023 16:16:00 +0800 Subject: [PATCH] code adjust for pull request #6 --- src/sf_service.c | 54 ++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/sf_service.c b/src/sf_service.c index a202283..184cc68 100644 --- a/src/sf_service.c +++ b/src/sf_service.c @@ -350,22 +350,28 @@ int sf_socket_create_server(SFListener *listener, { int result; - // 如果bind_addr未设置 - if (strlen(bind_addr) == 0) { - // 如果当前服务不存在IPv4地址,但是存在IPv6地址,则自动绑定IPv6地址 - if(!checkHostHasIPv4Addr() && checkHostHasIPv6Addr()){ - listener->sock = socketServerIPv6(bind_addr, port, &result); - }else{ - listener->sock = socketServer(bind_addr, port, &result); + if (af == AF_UNSPEC) { + if (bind_addr == NULL || *bind_addr == '\0') { + // 如果当前服务不存在IPv4地址,但是存在IPv6地址,则自动绑定IPv6地址 + if (!checkHostHasIPv4Addr() && checkHostHasIPv6Addr()) { + listener->sock = socketServerIPv6(bind_addr, + listener->port, &result); + } else { + listener->sock = socketServer(bind_addr, + listener->port, &result); + } + } else if (is_ipv6_addr(bind_addr)) { + listener->sock = socketServerIPv6(bind_addr, + listener->port, &result); + } else { + listener->sock = socketServer(bind_addr, + listener->port, &result); } - } else if (is_ipv6_addr(bind_addr)) // 通过判断IP地址是IPv4或者IPv6,根据结果进行初始化 - { - listener->sock = socketServerIPv6(bind_addr, port, &result); - }else{ - listener->sock = socketServer(bind_addr, port, &result); + } else { + listener->sock = socketServer2(af, bind_addr, + listener->port, &result); } - // listener->sock = socketServer2(af, bind_addr, listener->port, &result); if (listener->sock < 0) { return result; } @@ -380,7 +386,7 @@ int sf_socket_create_server(SFListener *listener, int sf_socket_server_ex(SFContext *sf_context) { int result; - int af = AF_INET; + int af = AF_UNSPEC; bool dual_ports; const char *bind_addr; SFNetworkHandler *handler; @@ -858,13 +864,16 @@ void sf_set_sig_quit_handler(sf_sig_quit_handler quit_handler) } // 判断当前服务器是否存在IPv4地址 -bool checkHostHasIPv4Addr(){ +bool checkHostHasIPv4Addr() +{ struct ifaddrs *ifaddr, *ifa; + bool hasIPv4; + if (getifaddrs(&ifaddr) == -1) { return false; } - bool hasIPv4 = false; + hasIPv4 = false; for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) { continue; @@ -879,18 +888,20 @@ bool checkHostHasIPv4Addr(){ } freeifaddrs(ifaddr); - return hasIPv4; } // 判断当前服务器是否存在IPv6地址 -bool checkHostHasIPv6Addr(){ +bool checkHostHasIPv6Addr() +{ struct ifaddrs *ifaddr, *ifa; + bool hasIPv6; + if (getifaddrs(&ifaddr) == -1) { return false; } - bool hasIPv6 = false; + hasIPv6 = false; for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL) { continue; @@ -899,12 +910,11 @@ bool checkHostHasIPv6Addr(){ continue; } if (ifa->ifa_addr->sa_family == AF_INET6) { - hasIPv6 = true; + hasIPv6 = true; break; } } freeifaddrs(ifaddr); - return hasIPv6; -} \ No newline at end of file +}