LEFT | RIGHT |
(no file at all) | |
1 // Copyright 2010 The Go Authors. All rights reserved. | 1 // Copyright 2010 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // +build darwin freebsd linux netbsd openbsd | 5 // +build darwin freebsd netbsd openbsd |
6 | 6 |
7 package net | 7 package net |
8 | |
9 import ( | |
10 "os" | |
11 "syscall" | |
12 ) | |
13 | |
14 func newPollServer() (s *pollServer, err error) { | |
15 s = new(pollServer) | |
16 if s.pr, s.pw, err = os.Pipe(); err != nil { | |
17 return nil, err | |
18 } | |
19 if err = syscall.SetNonblock(int(s.pr.Fd()), true); err != nil { | |
20 goto Errno | |
21 } | |
22 if err = syscall.SetNonblock(int(s.pw.Fd()), true); err != nil { | |
23 goto Errno | |
24 } | |
25 if s.poll, err = newpollster(); err != nil { | |
26 goto Error | |
27 } | |
28 if _, err = s.poll.AddFD(int(s.pr.Fd()), 'r', true); err != nil { | |
29 s.poll.Close() | |
30 goto Error | |
31 } | |
32 s.pending = make(map[int]*netFD) | |
33 go s.Run() | |
34 return s, nil | |
35 | |
36 Errno: | |
37 err = &os.PathError{ | |
38 Op: "setnonblock", | |
39 Path: s.pr.Name(), | |
40 Err: err, | |
41 } | |
42 Error: | |
43 s.pr.Close() | |
44 s.pw.Close() | |
45 return nil, err | |
46 } | |
LEFT | RIGHT |