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

📄 skset.h

📁 socket的事件分发模型
💻 H
字号:
#if !defined(SKSET__H_)
#define SKSET__H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "z_conf.h"
#include "skfwd.h"
//////////////////////////////////////////////////////////////////////
//	套接字集合
//////////////////////////////////////////////////////////////////////
class sockset_iter;
class ZBCDLL sockset
{
public:
	explicit sockset(size_t size = FD_SETSIZE);
	sockset(const sockset& rhs);
	~sockset()
	{
		clear();
	}

	const fd_set& get_fdset() const
	{
		return *m_pset;
	}
	fd_set& get_fdset()
	{
		return *m_pset;
	}

	void reset();
	int count() const;							//	set中包括的SOCKET数目
	sockset_iter get_iter() const;
	
	HRET create(size_t size);
	HRET add(SOCKET sk);							//	将Socket添加到集合中
	HRET remove(SOCKET hSocket);
	bool test(SOCKET hSocket) const;				//	测试Socket是否在集合中
	void clear();									//	清除所有Socket	
	int  correct();									//	矫正,将多余的socket清除,返回删掉的socket个数	
private:
	fd_set* m_pset;
	size_t	m_size;
#if !zPLAT_WIN
	size_t	m_cnt;
#endif
	friend class sockset_iter;
};
//	访问select结果的迭代器
class ZBCDLL sockset_iter
{
public:
	sockset_iter(const sockset& src) : m_src(src), m_pos(0)
	{}
	SOCKET operator*() const;	
private:
	const sockset&	m_src;
	size_t	m_pos;
};


inline sockset_iter sockset::get_iter() const
{
	return sockset_iter(*this);
}


#endif // !defined(SKSET__H_)
/*
 *	Copyright (c) 2003-2005 Zbchun.
 *	这是一个开源软件,允许任意使用,但必须保留该版权声明。
 */

⌨️ 快捷键说明

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