1
2
3
4
5
6
7
8 package poll
9
10 import (
11 "io"
12 "syscall"
13 )
14
15
16
17 func (fd *FD) eofError(n int, err error) error {
18 if n == 0 && err == nil && fd.ZeroReadIsEOF {
19 return io.EOF
20 }
21 return err
22 }
23
24
25 func (fd *FD) Shutdown(how int) error {
26 if err := fd.incref(); err != nil {
27 return err
28 }
29 defer fd.decref()
30 return syscall.Shutdown(fd.Sysfd, how)
31 }
32
33
34 func (fd *FD) Fchown(uid, gid int) error {
35 if err := fd.incref(); err != nil {
36 return err
37 }
38 defer fd.decref()
39 return ignoringEINTR(func() error {
40 return syscall.Fchown(fd.Sysfd, uid, gid)
41 })
42 }
43
44
45 func (fd *FD) Ftruncate(size int64) error {
46 if err := fd.incref(); err != nil {
47 return err
48 }
49 defer fd.decref()
50 return ignoringEINTR(func() error {
51 return syscall.Ftruncate(fd.Sysfd, size)
52 })
53 }
54
55
56
57 func (fd *FD) RawControl(f func(uintptr)) error {
58 if err := fd.incref(); err != nil {
59 return err
60 }
61 defer fd.decref()
62 f(uintptr(fd.Sysfd))
63 return nil
64 }
65
66
67
68
69
70
71
72
73 func ignoringEINTR(fn func() error) error {
74 for {
75 err := fn()
76 if err != syscall.EINTR {
77 return err
78 }
79 }
80 }
81
View as plain text