1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
#ifndef INCLUDED_SELECTOR_H_
#define INCLUDED_SELECTOR_H_
//HEADERS
#include <limits.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
//=
//CLASS
class Selector
{
fd_set d_read;
fd_set d_write;
fd_set d_except;
fd_set d_ret_read;
fd_set d_ret_write;
fd_set d_ret_except;
timeval d_alarm;
int d_max;
int d_ret;
int d_readidx;
int d_writeidx;
int d_exceptidx;
public:
Selector();
int exceptFd();
int nReady();
int readFd();
int wait();
int writeFd();
void addExceptFd(int fd);
void addReadFd(int fd);
void addWriteFd(int fd);
void noAlarm();
void rmExceptFd(int fd);
void rmReadFd(int fd);
void rmWriteFd(int fd);
void setAlarm(int sec, int usec = 0);
private:
int checkSet(int *index, fd_set &set);
void addFd(fd_set *set, int fd);
};
//=
//NREADY
inline int Selector::nReady()
{
return d_ret;
}
//=
//READFD
inline int Selector::readFd()
{
return checkSet(&d_readidx, d_ret_read);
}
//=
inline int Selector::writeFd()
{
return checkSet(&d_writeidx, d_ret_write);
}
inline int Selector::exceptFd()
{
return checkSet(&d_exceptidx, d_ret_except);
}
//SETALARM
inline void Selector::setAlarm(int sec, int usec)
{
d_alarm.tv_sec = sec;
d_alarm.tv_usec = usec;
}
//=
//NOALARM
inline void Selector::noAlarm()
{
setAlarm(-1, -1);
}
//=
//ADDREAD
inline void Selector::addReadFd(int fd)
{
addFd(&d_read, fd);
}
//=
inline void Selector::addWriteFd(int fd)
{
addFd(&d_write, fd);
}
inline void Selector::addExceptFd(int fd)
{
addFd(&d_except, fd);
}
//RMREAD
inline void Selector::rmReadFd(int fd)
{
FD_CLR(fd, &d_read);
}
//=
inline void Selector::rmWriteFd(int fd)
{
FD_CLR(fd, &d_write);
}
inline void Selector::rmExceptFd(int fd)
{
FD_CLR(fd, &d_except);
}
#endif
|