summaryrefslogtreecommitdiff
path: root/src/lib/syscall/socket_linux.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2008-09-29 13:37:00 -0700
committerRuss Cox <rsc@golang.org>2008-09-29 13:37:00 -0700
commit89e9ecebce88654474c8c34e0f478687821f1c14 (patch)
treeea13fc64b0665ed56ba3685d5ea857198de93a20 /src/lib/syscall/socket_linux.go
parent4b77e99cd49072fd12dadf14050a5c7cf2da3fba (diff)
downloadgolang-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.go20
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
+}