mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
* implement Linux epoll for polling i/o
* isolate OS-specific polling goop in Pollster type * move generic poll loop out of fd_darwin.go into fd.go R=r DELTA=782 (448 added, 281 deleted, 53 changed) OCL=16108 CL=16119
This commit is contained in:
parent
878fe69bc1
commit
e4a61c6524
9 changed files with 507 additions and 339 deletions
|
|
@ -95,5 +95,23 @@ export func getsockopt(fd, level, opt, valueptr, lenptr int64) (ret int64, errno
|
|||
}
|
||||
*/
|
||||
|
||||
// TODO: epoll
|
||||
export func epoll_create(size int64) (ret int64, errno int64) {
|
||||
r1, r2, err := syscall.Syscall(SYS_EPOLL_CREATE, size, 0, 0);
|
||||
return r1, err
|
||||
}
|
||||
|
||||
export func epoll_ctl(epfd, op, fd int64, ev *EpollEvent) int64 {
|
||||
r1, r2, err := syscall.Syscall6(SYS_EPOLL_CTL, epfd, op, fd, EpollEventPtr(ev), 0, 0);
|
||||
return err
|
||||
}
|
||||
|
||||
export func epoll_wait(epfd int64, ev *[]EpollEvent, msec int64) (ret int64, err int64) {
|
||||
var evptr, nev int64;
|
||||
if ev != nil && len(ev) > 0 {
|
||||
nev = int64(len(ev));
|
||||
evptr = EpollEventPtr(&ev[0])
|
||||
}
|
||||
r1, r2, err1 := syscall.Syscall6(SYS_EPOLL_WAIT, epfd, evptr, nev, msec, 0, 0);
|
||||
return r1, err1
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue