检查的boost :: ASIO缓冲区数据存在之前阅读()(Check if boost::asio

2019-10-30 00:55发布

我试图端口的软件,我跟Unix套接字写与TCP套接字版本,使用boost :: ASIO。 该计划的目的是在Linux机器上运行。

在代码的早期版本(使用Unix套接字),我用一个简单的检查,看看是否有在套接字缓冲区的新数据,然后用读预见的结构化数据出发:

    ioctl(s_c, FIONREAD, &socketstatus);
    while (socketstatus > 0)
    {// do receive stuff
    ioctl(s_c, FIONREAD, &socketstatus);}

有没有办法做的boost :: ASIO类似的东西? 或者一些更好的方法?

谢谢你在前进CB

Answer 1:

使用bytes_readable ,此实现你想要什么。

实现FIONREAD IO控制命令。

boost::asio::ip::tcp::socket socket(io_service); 
...
boost::asio::socket_base::bytes_readable command(true);
socket.io_control(command);
std::size_t bytes_readable = command.get();


Answer 2:

您可以从提取本地描述符boost::asio::ip::tcp::socket使用native() 方法 ,这应该只是罚款与您现有的代码。

虽然,我质疑你这样做的动机。 该短耳事件反应器实现使用轮询机制epoll上的Linux 。 应该没有必要轮询套接字读取或写入外io_service事件循环。



文章来源: Check if boost::asio buffer data is present before read()