简介
fd_set_adapter是对fd_set的封装
fd_set_adapter
是不同平台fd_set的别名
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
typedef win_fd_set_adapter fd_set_adapter;
#else
typedef posix_fd_set_adapter fd_set_adapter;
#endif
posix_fd_set_adapter
linux平台的fd_set适配器
set函数遍历operations中描述符添加到fd_set中,如果失败,则取消对应的操作
void set(reactor_op_queue<socket_type>& operations, op_queue<operation>& ops){reactor_op_queue<socket_type>::iterator i = operations.begin();while (i != operations.end()){reactor_op_queue<socket_type>::iterator op_iter = i++;if (!set(op_iter->first)){boost::system::error_code ec(error::fd_set_failure);operations.cancel_operations(op_iter, ops, ec);}}}bool cancel_operations(iterator i, op_queue<operation>& ops,const boost::system::error_code& ec =boost::asio::error::operation_aborted){if (i != operations_.end()){while (reactor_op* op = i->second.front()){op->ec_ = ec;i->second.pop();ops.push(op);}operations_.erase(i);return true;}return false;}
perform遍历operations中描述符检查是否在fd_set中,如果在,则执行操作
void perform(reactor_op_queue<socket_type>& operations,op_queue<operation>& ops) const{reactor_op_queue<socket_type>::iterator i = operations.begin();while (i != operations.end()){reactor_op_queue<socket_type>::iterator op_iter = i++;if (is_set(op_iter->first))operations.perform_operations(op_iter, ops);}}bool perform_operations(iterator i, op_queue<operation>& ops){if (i != operations_.end()){while (reactor_op* op = i->second.front()){if (op->perform()){i->second.pop();ops.push(op);}else{return true;}}operations_.erase(i);}return false;}
win_fd_set_adapter
windows平台fd_set的适配器