Newer
Older
casic_unitree_dog / src / utils.cpp
//
// Created by pengx on 2025/7/11.
//

#include "utils.hpp"

Utils::Utils() {
}

Utils::~Utils() = default;

bool Utils::is_network_reachable(const std::string &host, const std::string &service) {
    try {
        boost::asio::io_context io;
        boost::asio::ip::tcp::resolver resolver(io);
        boost::asio::ip::tcp::socket socket(io);

        const auto endpoints = resolver.resolve(host, service);

        // 设置连接超时为1000ms
        boost::asio::deadline_timer timer(io, boost::posix_time::millisec(1000));
        boost::system::error_code ec;

        // 异步连接并在超时后取消
        socket.async_connect(endpoints->endpoint(), [&](const boost::system::error_code &connect_ec) {
            if (!connect_ec) {
                timer.cancel();
            }
        });

        timer.async_wait([&](const boost::system::error_code &) {
            if (socket.is_open()) {
                socket.close();
            }
        });

        io.run(ec);

        return !ec && socket.is_open();
    } catch (std::exception &e) {
        std::cerr << "Network error: " << e.what() << std::endl;
        return false;
    }
}