mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net: refactor poller into new internal/poll package
This will make it possible to use the poller with the os package. This is a lot of code movement but the behavior is intended to be unchanged. Update #6817. Update #7903. Update #15021. Update #18507. Change-Id: I1413685928017c32df5654ded73a2643820977ae Reviewed-on: https://go-review.googlesource.com/36799 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
b548eee3d9
commit
3792db5183
79 changed files with 2722 additions and 1619 deletions
|
|
@ -10,6 +10,7 @@
|
|||
package net
|
||||
|
||||
import (
|
||||
"internal/poll"
|
||||
"os"
|
||||
"syscall"
|
||||
)
|
||||
|
|
@ -28,30 +29,8 @@ func sysSocket(family, sotype, proto int) (int, error) {
|
|||
return -1, os.NewSyscallError("socket", err)
|
||||
}
|
||||
if err = syscall.SetNonblock(s, true); err != nil {
|
||||
closeFunc(s)
|
||||
poll.CloseFunc(s)
|
||||
return -1, os.NewSyscallError("setnonblock", err)
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// Wrapper around the accept system call that marks the returned file
|
||||
// descriptor as nonblocking and close-on-exec.
|
||||
func accept(s int) (int, syscall.Sockaddr, error) {
|
||||
// See ../syscall/exec_unix.go for description of ForkLock.
|
||||
// It is probably okay to hold the lock across syscall.Accept
|
||||
// because we have put fd.sysfd into non-blocking mode.
|
||||
// However, a call to the File method will put it back into
|
||||
// blocking mode. We can't take that risk, so no use of ForkLock here.
|
||||
ns, sa, err := acceptFunc(s)
|
||||
if err == nil {
|
||||
syscall.CloseOnExec(ns)
|
||||
}
|
||||
if err != nil {
|
||||
return -1, nil, os.NewSyscallError("accept", err)
|
||||
}
|
||||
if err = syscall.SetNonblock(ns, true); err != nil {
|
||||
closeFunc(ns)
|
||||
return -1, nil, os.NewSyscallError("setnonblock", err)
|
||||
}
|
||||
return ns, sa, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue