diff --git a/native/dns/CMakeLists.txt b/native/dns/CMakeLists.txt index beb0293..8ff2ab1 100644 --- a/native/dns/CMakeLists.txt +++ b/native/dns/CMakeLists.txt @@ -4,7 +4,7 @@ set(SOURCE_FILES ${SOURCE_FILES} src/resolver.cpp src/types.cpp src/response.cpp if (WIN32) set(SOURCE_FILES ${SOURCE_FILES} src/resolver_windows.cpp) else() - set(SOURCE_FILES ${SOURCE_FILES} src/resolver_linux.cpp src/resolver_windows.cpp) + set(SOURCE_FILES ${SOURCE_FILES} src/resolver_linux.cpp) endif() find_package(Libevent REQUIRED) diff --git a/native/dns/binding.cc b/native/dns/binding.cc index 85593d6..eb4b385 100644 --- a/native/dns/binding.cc +++ b/native/dns/binding.cc @@ -85,6 +85,9 @@ NAN_METHOD(query_connect_address) { }); } +#ifndef WIN32 +__attribute__((visibility("default"))) +#endif NAN_MODULE_INIT(init) { Nan::Set(target, v8::String::NewFromUtf8(Nan::GetCurrentContext()->GetIsolate(), "resolve_cr").ToLocalChecked(), diff --git a/native/dns/src/resolver_linux.cpp b/native/dns/src/resolver_linux.cpp index 9c3a6dc..5df85c8 100644 --- a/native/dns/src/resolver_linux.cpp +++ b/native/dns/src/resolver_linux.cpp @@ -54,7 +54,7 @@ void Resolver::destroy_dns_request(Resolver::dns_request *request) { } if(!this->event.loop_active) - ub_cancel(this->ub_ctx, entry->ub_id); + ub_cancel(this->ub_ctx, request->ub_id); if(request->register_event) { event_del_noblock(request->register_event); diff --git a/native/dns/utils.cpp b/native/dns/utils.cpp index 302463e..b922284 100644 --- a/native/dns/utils.cpp +++ b/native/dns/utils.cpp @@ -13,10 +13,10 @@ #include #ifndef WIN32 -#include + #include #else -#include -#include + #include + #include #endif using namespace tc::dns; @@ -181,7 +181,11 @@ void tc::dns::cr_srv(Resolver& resolver, const ServerAddress& address, const cr_ for(auto [priority, pentries] : entries) { uint32_t count = 0; for(const auto& entry : pentries) { + #ifdef WIN32 count += max((size_t) entry.weight, 1UL); + #else + count += std::max((size_t) entry.weight, 1UL); + #endif } std::uniform_int_distribution dist(0, (uint32_t) (count - 1)); @@ -189,7 +193,11 @@ void tc::dns::cr_srv(Resolver& resolver, const ServerAddress& address, const cr_ count = 0; for(const auto& entry : pentries) { + #ifdef WIN32 count += max((size_t) entry.weight, 1UL); + #else + count += std::max((size_t) entry.weight, 1UL); + #endif if(count > index) { count = -1; results.emplace_back(priority, entry);