4
4
package net
5
5
6
6
import (
7
- "io"
8
7
"os"
9
8
"syscall"
10
9
"time"
@@ -21,13 +20,13 @@ type netFD struct {
21
20
22
21
// Read implements the Conn Read method.
23
22
func (c * netFD ) Read (b []byte ) (int , error ) {
24
- // TODO: Handle EAGAIN and perform poll
23
+ // TODO: Handle EAGAIN and perform poll
25
24
return c .File .Read (b )
26
25
}
27
26
28
27
// Write implements the Conn Write method.
29
28
func (c * netFD ) Write (b []byte ) (int , error ) {
30
- // TODO: Handle EAGAIN and perform poll
29
+ // TODO: Handle EAGAIN and perform poll
31
30
return c .File .Write (b )
32
31
}
33
32
@@ -55,3 +54,25 @@ func (*netFD) SetReadDeadline(t time.Time) error {
55
54
func (* netFD ) SetWriteDeadline (t time.Time ) error {
56
55
return ErrNotImplemented
57
56
}
57
+
58
+ type listener struct {
59
+ * os.File
60
+ }
61
+
62
+ // Accept implements the Listener Accept method.
63
+ func (l * listener ) Accept () (Conn , error ) {
64
+ fd , err := syscall .SockAccept (int (l .File .Fd ()), syscall .O_NONBLOCK )
65
+ if err != nil {
66
+ return nil , wrapSyscallError ("sock_accept" , err )
67
+ }
68
+ return & netFD {File : os .NewFile (uintptr (fd ), "conn" ), net : "file+net" , laddr : nil , raddr : nil }, nil
69
+ }
70
+
71
+ // Addr implements the Listener Addr method.
72
+ func (* listener ) Addr () Addr {
73
+ return nil
74
+ }
75
+
76
+ func fileListener (f * os.File ) (Listener , error ) {
77
+ return & listener {File : f }, nil
78
+ }
0 commit comments