📄 skset.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 + -