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

📄 poller.h

📁 socket的事件分发模型
💻 H
字号:
#ifndef POLLER_H_
#define POLLER_H_

#include "fdset.h"

class ZBCDLL poller
{
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);				//	使用poll检查集合内各句柄的读写状态
#if zDEBUG
	void print_freeze() const;
#endif
	explicit poller(size_t bufSize = 1024) : m_set(0), m_polls(0){
		if (bufSize > 0)
			create(bufSize);
	}
	~poller(){
		clear();
	}
protected:
	void dispatch_poll();
protected:
	fdset m_set;										//	fdbase集合
	struct pollfd* m_polls;									//	
};

inline size_t poller::count() const
{
	return m_set.count();
}

inline size_t poller::capacity() const
{
	return m_set.capacity();
}

inline fdbase* poller::get(int idx) const
{
	return m_set.get(idx);
}

#endif //POLLER_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -