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
+}