来自inotify_init()的文件描述的asio :: stream_descriptor的async_read_some失败

时间:2013-05-06 04:06:23

标签: boost asynchronous boost-asio file-descriptor inotify

我正在使用boost :: asio编写一个异步文件监控程序,基于项目:https://github.com/kvikas/file-monitor-service/tree/master/inotify

此项目使用boost :: asio :: posix :: stream_descriptor从inotify_init1(IN_NONBLOCK)返回的文件描述符中异步读取

不幸的是,当我重写这个项目时,我的程序中stream_descriptor的方法async_read_some只调用我的完成处理程序几次(包括事件:OPEN,ACCESS,MODIFY),以便监视文件中的第一次更改。

下次更改受监视文件时,会再次调用async_monitor方法,但不再调用完成处理程序。

我检查了方法aync_read_some中传递的所有参数:handler是正确的,initify_init()中的描述仍然是打开的。

你能帮我解释一下为什么我的完成处理程序不再被调用了??? 或者说明为什么方法async_read_some不成功的原因!

我的代码如下:

template<typename Monitor_Handler>
void async_monitor(Monitor_Handler handler) {
    input_->async_read_some(boost::asio::buffer(buffer_),
            boost::bind(&dir_monitor_impl::handle_monitor<Monitor_Handler>,
                    shared_from_this(), boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred, handler));
}


template<typename Monitor_Handler>
void handle_monitor(const boost::system::error_code &ec,
        std::size_t bytes_transferred, Monitor_Handler handler) {
    std::cout<<"Handle_monitor called"<<std::endl;
    if (!ec) {
        //process buffer
        async_monitor(handler);//async_monitor again
    }else{
        std::cout<<"Error at Handle_monitor"<<std::endl;
    }
}

0 个答案:

没有答案