internal/socket: merge internal/netreflect into internal/socket package

Updates golang/go#19051.

Change-Id: I4d86de8ea3fb03e40dd50bc0351562fbfa2c46a7
Reviewed-on: https://go-review.googlesource.com/38277
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/internal/netreflect/socket.go b/internal/netreflect/socket.go
deleted file mode 100644
index 1495b65..0000000
--- a/internal/netreflect/socket.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !go1.9
-
-// Package netreflect implements run-time reflection for the
-// facilities of net package.
-//
-// This package works only for Go 1.8 or below.
-package netreflect
-
-import (
-	"errors"
-	"net"
-)
-
-var (
-	errInvalidType = errors.New("invalid type")
-	errOpNoSupport = errors.New("operation not supported")
-)
-
-// SocketOf returns the socket descriptor of c.
-func SocketOf(c net.Conn) (uintptr, error) {
-	switch c.(type) {
-	case *net.TCPConn, *net.UDPConn, *net.IPConn, *net.UnixConn:
-		return socketOf(c)
-	default:
-		return 0, errInvalidType
-	}
-}
-
-// PacketSocketOf returns the socket descriptor of c.
-func PacketSocketOf(c net.PacketConn) (uintptr, error) {
-	switch c.(type) {
-	case *net.UDPConn, *net.IPConn, *net.UnixConn:
-		return socketOf(c.(net.Conn))
-	default:
-		return 0, errInvalidType
-	}
-}
diff --git a/internal/netreflect/socket_posix.go b/internal/netreflect/socket_posix.go
deleted file mode 100644
index 410c092..0000000
--- a/internal/netreflect/socket_posix.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !go1.9
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
-
-package netreflect
-
-import (
-	"net"
-	"reflect"
-	"runtime"
-)
-
-func socketOf(c net.Conn) (uintptr, error) {
-	v := reflect.ValueOf(c)
-	switch e := v.Elem(); e.Kind() {
-	case reflect.Struct:
-		fd := e.FieldByName("conn").FieldByName("fd")
-		switch e := fd.Elem(); e.Kind() {
-		case reflect.Struct:
-			sysfd := e.FieldByName("sysfd")
-			if runtime.GOOS == "windows" {
-				return uintptr(sysfd.Uint()), nil
-			}
-			return uintptr(sysfd.Int()), nil
-		}
-	}
-	return 0, errInvalidType
-}
diff --git a/internal/netreflect/socket_stub.go b/internal/netreflect/socket_stub.go
deleted file mode 100644
index 17b20c4..0000000
--- a/internal/netreflect/socket_stub.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !go1.9
-// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
-
-package netreflect
-
-import "net"
-
-func socketOf(c net.Conn) (uintptr, error) { return 0, errOpNoSupport }
diff --git a/internal/netreflect/socket_test.go b/internal/netreflect/socket_test.go
deleted file mode 100644
index b3aad0d..0000000
--- a/internal/netreflect/socket_test.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !go1.9
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
-
-package netreflect_test
-
-import (
-	"net"
-	"os"
-	"testing"
-
-	"golang.org/x/net/internal/netreflect"
-	"golang.org/x/net/internal/nettest"
-)
-
-func TestSocketOf(t *testing.T) {
-	for _, network := range []string{"tcp", "unix", "unixpacket"} {
-		if !nettest.TestableNetwork(network) {
-			continue
-		}
-		ln, err := nettest.NewLocalListener(network)
-		if err != nil {
-			t.Error(err)
-			continue
-		}
-		defer func() {
-			path := ln.Addr().String()
-			ln.Close()
-			if network == "unix" || network == "unixpacket" {
-				os.Remove(path)
-			}
-		}()
-		c, err := net.Dial(ln.Addr().Network(), ln.Addr().String())
-		if err != nil {
-			t.Error(err)
-			continue
-		}
-		defer c.Close()
-		if _, err := netreflect.SocketOf(c); err != nil {
-			t.Error(err)
-			continue
-		}
-	}
-}
-
-func TestPacketSocketOf(t *testing.T) {
-	for _, network := range []string{"udp", "unixgram"} {
-		if !nettest.TestableNetwork(network) {
-			continue
-		}
-		c, err := nettest.NewLocalPacketListener(network)
-		if err != nil {
-			t.Error(err)
-			continue
-		}
-		defer c.Close()
-		if _, err := netreflect.PacketSocketOf(c); err != nil {
-			t.Error(err)
-			continue
-		}
-	}
-}
diff --git a/internal/socket/reflect.go b/internal/socket/reflect.go
index 2368eec..bb179f1 100644
--- a/internal/socket/reflect.go
+++ b/internal/socket/reflect.go
@@ -7,10 +7,11 @@
 package socket
 
 import (
+	"errors"
 	"net"
 	"os"
-
-	"golang.org/x/net/internal/netreflect"
+	"reflect"
+	"runtime"
 )
 
 // A Conn represents a raw connection.
@@ -24,7 +25,7 @@
 }
 
 func (o *Option) get(c *Conn, b []byte) (int, error) {
-	s, err := netreflect.SocketOf(c.c)
+	s, err := socketOf(c.c)
 	if err != nil {
 		return 0, err
 	}
@@ -33,9 +34,29 @@
 }
 
 func (o *Option) set(c *Conn, b []byte) error {
-	s, err := netreflect.SocketOf(c.c)
+	s, err := socketOf(c.c)
 	if err != nil {
 		return err
 	}
 	return os.NewSyscallError("setsockopt", setsockopt(s, o.Level, o.Name, b))
 }
+
+func socketOf(c net.Conn) (uintptr, error) {
+	switch c.(type) {
+	case *net.TCPConn, *net.UDPConn, *net.IPConn:
+		v := reflect.ValueOf(c)
+		switch e := v.Elem(); e.Kind() {
+		case reflect.Struct:
+			fd := e.FieldByName("conn").FieldByName("fd")
+			switch e := fd.Elem(); e.Kind() {
+			case reflect.Struct:
+				sysfd := e.FieldByName("sysfd")
+				if runtime.GOOS == "windows" {
+					return uintptr(sysfd.Uint()), nil
+				}
+				return uintptr(sysfd.Int()), nil
+			}
+		}
+	}
+	return 0, errors.New("invalid type")
+}