-
Notifications
You must be signed in to change notification settings - Fork 560
/
make_epoll_table.py
executable file
·63 lines (50 loc) · 1.76 KB
/
make_epoll_table.py
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
#!/usr/bin/python2
def get(old,wc,rc,cc):
if ('xxx' in (rc, wc, cc)):
return "0",255
if ('add' in (rc, wc, cc)):
events = []
if rc == 'add' or (rc != 'del' and 'r' in old):
events.append("EPOLLIN")
if wc == 'add' or (wc != 'del' and 'w' in old):
events.append("EPOLLOUT")
if cc == 'add' or (cc != 'del' and 'c' in old):
events.append("EPOLLRDHUP")
if old == "0":
op = "EPOLL_CTL_ADD"
else:
op = "EPOLL_CTL_MOD"
return "|".join(events), op
if ('del' in (rc, wc, cc)):
delevents = []
modevents = []
op = "EPOLL_CTL_DEL"
if 'r' in old:
modevents.append("EPOLLIN")
if 'w' in old:
modevents.append("EPOLLOUT")
if 'c' in old:
modevents.append("EPOLLRDHUP")
for item, event in [(rc,"EPOLLIN"),
(wc,"EPOLLOUT"),
(cc,"EPOLLRDHUP")]:
if item == 'del':
delevents.append(event)
if event in modevents:
modevents.remove(event)
if modevents:
return "|".join(modevents), "EPOLL_CTL_MOD"
else:
return "|".join(delevents), "EPOLL_CTL_DEL"
return 0, 0
def fmt(op, ev, old, wc, rc, cc):
entry = "{ %s, %s },"%(op, ev)
print "\t/* old=%3s, write:%3s, read:%3s, close:%3s */\n\t%s" % (
old, wc, rc, cc, entry)
return len(entry)
for old in ('0','r','w','rw','c','cr','cw','crw'):
for wc in ('0', 'add', 'del', 'xxx'):
for rc in ('0', 'add', 'del', 'xxx'):
for cc in ('0', 'add', 'del', 'xxx'):
op,ev = get(old,wc,rc,cc)
fmt(op, ev, old, wc, rc, cc)