📄 epoller.h
字号:
#ifndef EPOLLER_H_
#define EPOLLER_H_
#include "fdset.h"
#if zPLAT_WIN
#include "epoll.h"
#else
#include <sys/epoll.h>
#endif
class ZBCDLL epoller
{
public:
HRET create(size_t bufSize); // 创建bufSize大小的select池
HRET expand(size_t bufSize); // 调整select池的大小
HRET add(fdbase& fd, int events = FDEVENT_IN | FDEVENT_OUT);// 将一个fdbase加入select池,设定初始侦听事件为events
HRET remove(int idx); // 移除一个fdbase
void clear(); // 清除所有的fdbase
void destroy();
size_t count() const; // select池内的fdbase个数
size_t capacity() const; // select池的容量
fdbase* get(int idx) const; //
void set_events(int idx, int events); // FDEVENT_IN | FDEVENT_OUT | FDEVENT_ERR | ...
void refresh(); // 刷新,取得各fdbase最新的读写许可
HRET wait(const struct timeval* ptv); // 侦测系统事件,并派送
explicit epoller(size_t bufSize = 1024) : m_set(0), m_epoll_fd(-1), m_pRevents(0){
if (bufSize > 0)
create(bufSize);
}
~epoller(){
clear();
}
protected:
void dispatch(int count);
protected:
fdset m_set;
int m_epoll_fd; // epoll描述符
epoll_event* m_pRevents; // epoll返回的事件数组
};
inline size_t epoller::count() const{
return m_set.count();
}
inline size_t epoller::capacity() const
{
return m_set.capacity();
}
inline fdbase* epoller::get(int idx) const
{
return m_set.get(idx);
}
#endif //EPOLLER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -