@@ -29,6 +29,7 @@ type netFD struct {
29
29
// number of bytes transferred.
30
30
readHook func (int )
31
31
writeHook func (int )
32
+ closeHook func ()
32
33
}
33
34
34
35
func (fd * netFD ) setAddr (laddr , raddr Addr ) {
@@ -39,6 +40,9 @@ func (fd *netFD) setAddr(laddr, raddr Addr) {
39
40
40
41
func (fd * netFD ) Close () error {
41
42
runtime .SetFinalizer (fd , nil )
43
+ if fd .closeHook != nil {
44
+ fd .closeHook ()
45
+ }
42
46
return fd .pfd .Close ()
43
47
}
44
48
@@ -49,10 +53,16 @@ func (fd *netFD) shutdown(how int) error {
49
53
}
50
54
51
55
func (fd * netFD ) closeRead () error {
56
+ if fd .closeHook != nil {
57
+ fd .closeHook ()
58
+ }
52
59
return fd .shutdown (syscall .SHUT_RD )
53
60
}
54
61
55
62
func (fd * netFD ) closeWrite () error {
63
+ if fd .closeHook != nil {
64
+ fd .closeHook ()
65
+ }
56
66
return fd .shutdown (syscall .SHUT_WR )
57
67
}
58
68
@@ -94,7 +104,7 @@ func (fd *netFD) readFromInet6(p []byte, from *syscall.SockaddrInet6) (n int, er
94
104
func (fd * netFD ) readMsg (p []byte , oob []byte , flags int ) (n , oobn , retflags int , sa syscall.Sockaddr , err error ) {
95
105
n , oobn , retflags , sa , err = fd .pfd .ReadMsg (p , oob , flags )
96
106
if fd .readHook != nil && err == nil {
97
- fd .readHook (n + oobn )
107
+ fd .readHook (n )
98
108
}
99
109
runtime .KeepAlive (fd )
100
110
return n , oobn , retflags , sa , wrapSyscallError (readMsgSyscallName , err )
@@ -103,7 +113,7 @@ func (fd *netFD) readMsg(p []byte, oob []byte, flags int) (n, oobn, retflags int
103
113
func (fd * netFD ) readMsgInet4 (p []byte , oob []byte , flags int , sa * syscall.SockaddrInet4 ) (n , oobn , retflags int , err error ) {
104
114
n , oobn , retflags , err = fd .pfd .ReadMsgInet4 (p , oob , flags , sa )
105
115
if fd .readHook != nil && err == nil {
106
- fd .readHook (n + oobn )
116
+ fd .readHook (n )
107
117
}
108
118
runtime .KeepAlive (fd )
109
119
return n , oobn , retflags , wrapSyscallError (readMsgSyscallName , err )
@@ -112,7 +122,7 @@ func (fd *netFD) readMsgInet4(p []byte, oob []byte, flags int, sa *syscall.Socka
112
122
func (fd * netFD ) readMsgInet6 (p []byte , oob []byte , flags int , sa * syscall.SockaddrInet6 ) (n , oobn , retflags int , err error ) {
113
123
n , oobn , retflags , err = fd .pfd .ReadMsgInet6 (p , oob , flags , sa )
114
124
if fd .readHook != nil && err == nil {
115
- fd .readHook (n + oobn )
125
+ fd .readHook (n )
116
126
}
117
127
runtime .KeepAlive (fd )
118
128
return n , oobn , retflags , wrapSyscallError (readMsgSyscallName , err )
@@ -157,7 +167,7 @@ func (fd *netFD) writeToInet6(p []byte, sa *syscall.SockaddrInet6) (n int, err e
157
167
func (fd * netFD ) writeMsg (p []byte , oob []byte , sa syscall.Sockaddr ) (n int , oobn int , err error ) {
158
168
n , oobn , err = fd .pfd .WriteMsg (p , oob , sa )
159
169
if fd .writeHook != nil && err == nil {
160
- fd .writeHook (n + oobn )
170
+ fd .writeHook (n )
161
171
}
162
172
runtime .KeepAlive (fd )
163
173
return n , oobn , wrapSyscallError (writeMsgSyscallName , err )
@@ -166,7 +176,7 @@ func (fd *netFD) writeMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oob
166
176
func (fd * netFD ) writeMsgInet4 (p []byte , oob []byte , sa * syscall.SockaddrInet4 ) (n int , oobn int , err error ) {
167
177
n , oobn , err = fd .pfd .WriteMsgInet4 (p , oob , sa )
168
178
if fd .writeHook != nil && err == nil {
169
- fd .writeHook (n + oobn )
179
+ fd .writeHook (n )
170
180
}
171
181
runtime .KeepAlive (fd )
172
182
return n , oobn , wrapSyscallError (writeMsgSyscallName , err )
@@ -175,7 +185,7 @@ func (fd *netFD) writeMsgInet4(p []byte, oob []byte, sa *syscall.SockaddrInet4)
175
185
func (fd * netFD ) writeMsgInet6 (p []byte , oob []byte , sa * syscall.SockaddrInet6 ) (n int , oobn int , err error ) {
176
186
n , oobn , err = fd .pfd .WriteMsgInet6 (p , oob , sa )
177
187
if fd .writeHook != nil && err == nil {
178
- fd .writeHook (n + oobn )
188
+ fd .writeHook (n )
179
189
}
180
190
runtime .KeepAlive (fd )
181
191
return n , oobn , wrapSyscallError (writeMsgSyscallName , err )
0 commit comments