From 5a202d3d5f30a64e459986535b95d0d795626501 Mon Sep 17 00:00:00 2001 From: Tobias Wallner <70602844+TobiasWallner@users.noreply.github.com> Date: Fri, 25 Sep 2026 21:20:00 +0200 Subject: [PATCH] =?UTF-8?q?Added=20a=20feature=20test=20to=20auto=20enable?= =?UTF-8?q?/disable=20CPPHTTPLIB=5FUSE=5FNON=5FBLOCKI=E2=80=A6=20(#2578)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added a feature test to auto enable/disable CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO * turned status: WARNING 'GetAddrInfoExCancel is unavailable; disabling non-blocking getaddrinfo.' into a warning * added ws2_32 for the GetAddrInfoExCancel. this catches previous false negatives --------- Co-authored-by: Tobias Wallner --- CMakeLists.txt | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3d8c294..d3418b44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ * HTTPLIB_REQUIRE_BROTLI (default off) * HTTPLIB_REQUIRE_ZSTD (default off) * HTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES (default off) - * HTTPLIB_USE_NON_BLOCKING_GETADDRINFO (default on) + * HTTPLIB_USE_NON_BLOCKING_GETADDRINFO (default on when supported) * HTTPLIB_COMPILE (default off) * HTTPLIB_INSTALL (default on) * HTTPLIB_SHARED (default off) builds as a shared library (if HTTPLIB_COMPILE is ON) @@ -181,6 +181,24 @@ if(HTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES) set(HTTPLIB_IS_USING_MACOSX_AUTOMATIC_ROOT_CERTIFICATES FALSE) endif() set(HTTPLIB_IS_USING_NON_BLOCKING_GETADDRINFO ${HTTPLIB_USE_NON_BLOCKING_GETADDRINFO}) +if(HTTPLIB_IS_USING_NON_BLOCKING_GETADDRINFO AND WIN32) + include(CheckCXXSymbolExists) + + set(_httplib_cmake_required_definitions ${CMAKE_REQUIRED_DEFINITIONS}) + set(_httplib_cmake_required_libraries ${CMAKE_REQUIRED_LIBRARIES}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_WIN32_WINNT=0x0A00) + list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32) + check_cxx_symbol_exists(GetAddrInfoExCancel "winsock2.h;ws2tcpip.h" HTTPLIB_HAVE_GETADDRINFOEXCANCEL) + set(CMAKE_REQUIRED_DEFINITIONS ${_httplib_cmake_required_definitions}) + set(CMAKE_REQUIRED_LIBRARIES ${_httplib_cmake_required_libraries}) + unset(_httplib_cmake_required_definitions) + unset(_httplib_cmake_required_libraries) + + if(NOT HTTPLIB_HAVE_GETADDRINFOEXCANCEL) + set(HTTPLIB_IS_USING_NON_BLOCKING_GETADDRINFO FALSE) + message(WARNING "GetAddrInfoExCancel is unavailable; disabling non-blocking getaddrinfo.") + endif() +endif() # Threads needed for on some systems, and for on Linux set(THREADS_PREFER_PTHREAD_FLAG TRUE) @@ -367,7 +385,7 @@ target_link_libraries(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC} # Needed for API from MacOS Security framework "$<$,$,$>:-framework CFNetwork -framework CoreFoundation -framework Security>" # Needed for non-blocking getaddrinfo on MacOS - "$<$,$>:-framework CFNetwork -framework CoreFoundation>" + "$<$,$>:-framework CFNetwork -framework CoreFoundation>" # Can't put multiple targets in a single generator expression or it bugs out. $<$:Brotli::common> $<$:Brotli::encoder> @@ -390,7 +408,7 @@ target_compile_definitions(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC} $<$:CPPHTTPLIB_WOLFSSL_SUPPORT> $<$:CPPHTTPLIB_MBEDTLS_SUPPORT> $<$,$>:CPPHTTPLIB_DISABLE_MACOSX_AUTOMATIC_ROOT_CERTIFICATES> - $<$:CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO> + $<$:CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO> ) # CMake configuration files installation directory