net: provide public access to file descriptors
Fixes #918.
R=rsc, rog, brainman
CC=golang-dev
https://golang.org/cl/2904041
diff --git a/src/pkg/net/fd.go b/src/pkg/net/fd.go
index 7d3f227..d300e4b 100644
--- a/src/pkg/net/fd.go
+++ b/src/pkg/net/fd.go
@@ -517,3 +517,17 @@
}
return nfd, nil
}
+
+func (fd *netFD) dup() (f *os.File, err os.Error) {
+ ns, e := syscall.Dup(fd.sysfd)
+ if e != 0 {
+ return nil, &OpError{"dup", fd.net, fd.laddr, os.Errno(e)}
+ }
+
+ // We want blocking mode for the new fd, hence the double negative.
+ if e = syscall.SetNonblock(ns, false); e != 0 {
+ return nil, &OpError{"setnonblock", fd.net, fd.laddr, os.Errno(e)}
+ }
+
+ return os.NewFile(ns, fd.sysfile.Name()), nil
+}