annotate vendor/golang.org/x/sys/unix/epoll_zos.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 // Copyright 2020 The Go Authors. All rights reserved.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2 // Use of this source code is governed by a BSD-style
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 // license that can be found in the LICENSE file.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 //go:build zos && s390x
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 // +build zos,s390x
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 package unix
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 "sync"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 // This file simulates epoll on z/OS using poll.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 // Analogous to epoll_event on Linux.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 // TODO(neeilan): Pad is because the Linux kernel expects a 96-bit struct. We never pass this to the kernel; remove?
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 type EpollEvent struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 Events uint32
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 Fd int32
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 Pad int32
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 const (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 EPOLLERR = 0x8
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 EPOLLHUP = 0x10
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 EPOLLIN = 0x1
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 EPOLLMSG = 0x400
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 EPOLLOUT = 0x4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 EPOLLPRI = 0x2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 EPOLLRDBAND = 0x80
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 EPOLLRDNORM = 0x40
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 EPOLLWRBAND = 0x200
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 EPOLLWRNORM = 0x100
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 EPOLL_CTL_ADD = 0x1
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 EPOLL_CTL_DEL = 0x2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 EPOLL_CTL_MOD = 0x3
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 // The following constants are part of the epoll API, but represent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 // currently unsupported functionality on z/OS.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 // EPOLL_CLOEXEC = 0x80000
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 // EPOLLET = 0x80000000
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 // EPOLLONESHOT = 0x40000000
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 // EPOLLRDHUP = 0x2000 // Typically used with edge-triggered notis
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 // EPOLLEXCLUSIVE = 0x10000000 // Exclusive wake-up mode
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 // EPOLLWAKEUP = 0x20000000 // Relies on Linux's BLOCK_SUSPEND capability
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 // TODO(neeilan): We can eliminate these epToPoll / pToEpoll calls by using identical mask values for POLL/EPOLL
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 // constants where possible The lower 16 bits of epoll events (uint32) can fit any system poll event (int16).
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 // epToPollEvt converts epoll event field to poll equivalent.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 // In epoll, Events is a 32-bit field, while poll uses 16 bits.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 func epToPollEvt(events uint32) int16 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 var ep2p = map[uint32]int16{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 EPOLLIN: POLLIN,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 EPOLLOUT: POLLOUT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 EPOLLHUP: POLLHUP,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 EPOLLPRI: POLLPRI,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 EPOLLERR: POLLERR,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 var pollEvts int16 = 0
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 for epEvt, pEvt := range ep2p {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 if (events & epEvt) != 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 pollEvts |= pEvt
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 return pollEvts
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 // pToEpollEvt converts 16 bit poll event bitfields to 32-bit epoll event fields.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 func pToEpollEvt(revents int16) uint32 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 var p2ep = map[int16]uint32{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 POLLIN: EPOLLIN,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 POLLOUT: EPOLLOUT,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 POLLHUP: EPOLLHUP,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 POLLPRI: EPOLLPRI,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 POLLERR: EPOLLERR,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 var epollEvts uint32 = 0
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 for pEvt, epEvt := range p2ep {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 if (revents & pEvt) != 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 epollEvts |= epEvt
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
88
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
89 return epollEvts
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
90 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
91
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
92 // Per-process epoll implementation.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
93 type epollImpl struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
94 mu sync.Mutex
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
95 epfd2ep map[int]*eventPoll
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
96 nextEpfd int
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
97 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
98
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
99 // eventPoll holds a set of file descriptors being watched by the process. A process can have multiple epoll instances.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
100 // On Linux, this is an in-kernel data structure accessed through a fd.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
101 type eventPoll struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
102 mu sync.Mutex
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
103 fds map[int]*EpollEvent
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
104 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
105
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
106 // epoll impl for this process.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
107 var impl epollImpl = epollImpl{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
108 epfd2ep: make(map[int]*eventPoll),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
109 nextEpfd: 0,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
110 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
111
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
112 func (e *epollImpl) epollcreate(size int) (epfd int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
113 e.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
114 defer e.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
115 epfd = e.nextEpfd
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
116 e.nextEpfd++
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
117
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
118 e.epfd2ep[epfd] = &eventPoll{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
119 fds: make(map[int]*EpollEvent),
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
120 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
121 return epfd, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
122 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
123
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
124 func (e *epollImpl) epollcreate1(flag int) (fd int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
125 return e.epollcreate(4)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
126 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
127
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
128 func (e *epollImpl) epollctl(epfd int, op int, fd int, event *EpollEvent) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
129 e.mu.Lock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
130 defer e.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
131
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
132 ep, ok := e.epfd2ep[epfd]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
133 if !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
134
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
135 return EBADF
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
136 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
137
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
138 switch op {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
139 case EPOLL_CTL_ADD:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
140 // TODO(neeilan): When we make epfds and fds disjoint, detect epoll
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
141 // loops here (instances watching each other) and return ELOOP.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
142 if _, ok := ep.fds[fd]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
143 return EEXIST
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
144 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
145 ep.fds[fd] = event
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
146 case EPOLL_CTL_MOD:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
147 if _, ok := ep.fds[fd]; !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
148 return ENOENT
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
149 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
150 ep.fds[fd] = event
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
151 case EPOLL_CTL_DEL:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
152 if _, ok := ep.fds[fd]; !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
153 return ENOENT
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
154 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
155 delete(ep.fds, fd)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
156
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
157 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
158 return nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
159 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
160
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
161 // Must be called while holding ep.mu
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
162 func (ep *eventPoll) getFds() []int {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
163 fds := make([]int, len(ep.fds))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
164 for fd := range ep.fds {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
165 fds = append(fds, fd)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
166 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
167 return fds
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
168 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
169
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
170 func (e *epollImpl) epollwait(epfd int, events []EpollEvent, msec int) (n int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
171 e.mu.Lock() // in [rare] case of concurrent epollcreate + epollwait
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
172 ep, ok := e.epfd2ep[epfd]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
173
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
174 if !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
175 e.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
176 return 0, EBADF
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
177 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
178
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
179 pollfds := make([]PollFd, 4)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
180 for fd, epollevt := range ep.fds {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
181 pollfds = append(pollfds, PollFd{Fd: int32(fd), Events: epToPollEvt(epollevt.Events)})
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
182 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
183 e.mu.Unlock()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
184
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
185 n, err = Poll(pollfds, msec)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
186 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
187 return n, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
188 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
189
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
190 i := 0
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
191 for _, pFd := range pollfds {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
192 if pFd.Revents != 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
193 events[i] = EpollEvent{Fd: pFd.Fd, Events: pToEpollEvt(pFd.Revents)}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
194 i++
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
195 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
196
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
197 if i == n {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
198 break
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
199 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
200 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
201
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
202 return n, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
203 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
204
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
205 func EpollCreate(size int) (fd int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
206 return impl.epollcreate(size)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
207 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
208
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
209 func EpollCreate1(flag int) (fd int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
210 return impl.epollcreate1(flag)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
211 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
212
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
213 func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
214 return impl.epollctl(epfd, op, fd, event)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
215 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
216
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
217 // Because EpollWait mutates events, the caller is expected to coordinate
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
218 // concurrent access if calling with the same epfd from multiple goroutines.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
219 func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
220 return impl.epollwait(epfd, events, msec)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
221 }