diff options
author | Russ Cox <rsc@golang.org> | 2008-09-29 13:37:00 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2008-09-29 13:37:00 -0700 |
commit | 89e9ecebce88654474c8c34e0f478687821f1c14 (patch) | |
tree | ea13fc64b0665ed56ba3685d5ea857198de93a20 /src/lib/syscall/socket_linux.go | |
parent | 4b77e99cd49072fd12dadf14050a5c7cf2da3fba (diff) | |
download | golang-89e9ecebce88654474c8c34e0f478687821f1c14.tar.gz |
* 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
Diffstat (limited to 'src/lib/syscall/socket_linux.go')
-rw-r--r-- | src/lib/syscall/socket_linux.go | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/lib/syscall/socket_linux.go b/src/lib/syscall/socket_linux.go index b690e81a2..be55bca7b 100644 --- a/src/lib/syscall/socket_linux.go +++ b/src/lib/syscall/socket_linux.go @@ -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 +} |