⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 epoller.h

📁 socket的事件分发模型
💻 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 + -