LCOV - code coverage report
Current view: top level - src - resolver.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 94.4 % 18 17
Test Date: 2026-02-04 14:16:13 Functions: 75.0 % 4 3

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2025 Vinnie Falco (vinnie dot falco at gmail dot com)
       3              : //
       4              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6              : //
       7              : // Official repository: https://github.com/cppalliance/corosio
       8              : //
       9              : 
      10              : #include <boost/corosio/resolver.hpp>
      11              : #include <boost/corosio/detail/platform.hpp>
      12              : 
      13              : #if BOOST_COROSIO_HAS_IOCP
      14              : #include "src/detail/iocp/resolver_service.hpp"
      15              : #elif BOOST_COROSIO_POSIX
      16              : #include "src/detail/posix/resolver_service.hpp"
      17              : #endif
      18              : 
      19              : #include <stdexcept>
      20              : 
      21              : /*
      22              :     Resolver Frontend
      23              :     =================
      24              : 
      25              :     This file implements the public resolver class, which delegates to
      26              :     platform-specific services:
      27              :     - Windows: win_resolver_service (uses GetAddrInfoExW)
      28              :     - POSIX: posix_resolver_service (uses getaddrinfo + worker threads)
      29              : 
      30              :     The resolver constructor uses find_service() to locate the resolver
      31              :     service, which must have been previously created by the scheduler
      32              :     during io_context construction. If not found, construction fails.
      33              : 
      34              :     This separation allows the public API to be platform-agnostic while
      35              :     the implementation details are hidden in the detail namespace.
      36              : */
      37              : 
      38              : namespace boost::corosio {
      39              : namespace {
      40              : 
      41              : #if BOOST_COROSIO_HAS_IOCP
      42              : using resolver_service = detail::win_resolver_service;
      43              : #elif BOOST_COROSIO_POSIX
      44              : using resolver_service = detail::posix_resolver_service;
      45              : #endif
      46              : 
      47              : } // namespace
      48              : 
      49           30 : resolver::
      50           30 : ~resolver()
      51              : {
      52           30 :     if (impl_)
      53           28 :         impl_->release();
      54           30 : }
      55              : 
      56           29 : resolver::
      57              : resolver(
      58           29 :     capy::execution_context& ctx)
      59           29 :     : io_object(ctx)
      60              : {
      61           29 :     auto* svc = ctx_->find_service<resolver_service>();
      62           29 :     if (!svc)
      63              :     {
      64              :         // Resolver service not yet created - this happens if io_context
      65              :         // hasn't been constructed yet, or if the scheduler didn't
      66              :         // initialize the resolver service
      67            0 :         throw std::runtime_error("resolver_service not found");
      68              :     }
      69           29 :     auto& impl = svc->create_impl();
      70           29 :     impl_ = &impl;
      71           29 : }
      72              : 
      73              : void
      74            5 : resolver::
      75              : cancel()
      76              : {
      77            5 :     if (impl_)
      78            5 :         get().cancel();
      79            5 : }
      80              : 
      81              : } // namespace boost::corosio
        

Generated by: LCOV version 2.3