【发布时间】: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