【问题标题】:Boost ASIO return Bad file descriptorBoost ASIO 返回错误的文件描述符
【发布时间】:2020-10-20 10:05:49
【问题描述】:

我尝试使用 asio icmp 服务,但出现错误:“错误的文件描述符 ",我使用的是 ubuntu20.04 和 boost1.74.0。 我想测试 icmp 服务,我写了一个使用 ASIO 的测试,我使用 tcpdump 进行 ping 请求。 tcpdump 命令是 shell

 sudo tcpdump -i any icmp -vv -XX

我的代码是

#include <iostream>
#include <thread>
#include <boost/asio.hpp>
#include <chrono>
#include <string>

class pinger
{
public:
    pinger(boost::asio::io_context& io_context)
            : resolver_(io_context), socket_(io_context)
    {
        start_receive();
    }


private:

    void start_receive()
    {

        socket_.async_receive_from(boost::asio::buffer(receive,1024),destination,
                                   [this](boost::system::error_code ec, std::size_t size){

                                       if (ec)
                                           std::cout<<ec.message()<<std::endl;
                                       if (size>0)
                                           std::cout<<size<<std::endl;
                                   });
    }

    boost::asio::ip::icmp::resolver resolver_;
    boost::asio::ip::icmp::socket socket_;
    unsigned char receive[1024];
    boost::asio::ip::icmp::endpoint destination;
};


int main() {


    try {

        boost::asio::io_context io_context;
        pinger service = pinger(io_context);
        io_context.run();
    }
    catch (std::exception& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    return 0;

}

似乎 socket_.async_receive_from 直接出错而不是等待接收数据。 我是一个新的 C++ 学习者,首先使用 boost.asio。非常感谢。

【问题讨论】:

  • ...此外,您发现的少数 boost 示例无法使用最新的 boost 代码进行编译 - 这使得这个问题更加相关。

标签: c++ boost-asio


【解决方案1】:

您正在调用start_receive,但未打开套接字。你甚至不使用解析器。请参阅 Ping 示例以供参考:https://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/example/icmp/ping.cpp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2016-05-04
    • 2019-06-11
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多