-
Notifications
You must be signed in to change notification settings - Fork 4
/
Epoll.h
68 lines (52 loc) · 1.4 KB
/
Epoll.h
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
/*
* File: Epoll.h
* Author: Administrator
*
* Created on 2014年1月27日, 下午2:13
*/
#ifndef EPOLL_H
#define EPOLL_H
#include <sys/epoll.h>
#include <boost/noncopyable.hpp>
#define Epoll_MaxSize 1024
namespace CommLib {
class Sock;
class Epoll : boost::noncopyable {
public:
enum EpollEvent {
EVENT_READ = EPOLLIN,
EVENT_WRITE = EPOLLOUT,
EVENT_CLOSE = EPOLLHUP,
EVENT_LET = EPOLLET, //边缘触发 默认水平触发
};
enum EpollOp {
Op_ADD = EPOLL_CTL_ADD,
Op_DEL = EPOLL_CTL_DEL,
Op_MOD = EPOLL_CTL_MOD,
};
Epoll(int size = Epoll_MaxSize);
virtual ~Epoll();
virtual bool Schedule(int sec) = 0;
int epollAdd(Sock* sock, int event);
int epollDel(Sock* sock);
int epollMod(Sock* sock, int event);
virtual int epollwait(struct epoll_event *events, int maxevents, int timeout);
int GetEpollSize()
{
return epollsize_;
}
protected:
struct epoll_event* pEvents_;
private:
int epoll_;
int epollsize_;
int epollctl(EpollOp op, Sock* sock, int event);
};
class EpollSimple : public Epoll {
public:
EpollSimple(int size = Epoll_MaxSize);
~EpollSimple();
virtual bool Schedule(int sec);
};
}
#endif /* EPOOL_H */