go.net/internal/nettest: add ProtocolNotSupported function
Moves from go.net/ipv4 pacakge to here, we use this function not only
for ipv4 testing but ipv6 testing.
LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/169150043
diff --git a/internal/nettest/error_posix.go b/internal/nettest/error_posix.go
new file mode 100644
index 0000000..963ed99
--- /dev/null
+++ b/internal/nettest/error_posix.go
@@ -0,0 +1,31 @@
+// Copyright 2014 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 darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
+package nettest
+
+import (
+ "os"
+ "syscall"
+)
+
+func protocolNotSupported(err error) bool {
+ switch err := err.(type) {
+ case syscall.Errno:
+ switch err {
+ case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
+ return true
+ }
+ case *os.SyscallError:
+ switch err := err.Err.(type) {
+ case syscall.Errno:
+ switch err {
+ case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
+ return true
+ }
+ }
+ }
+ return false
+}
diff --git a/internal/nettest/error_stub.go b/internal/nettest/error_stub.go
new file mode 100644
index 0000000..3c74d81
--- /dev/null
+++ b/internal/nettest/error_stub.go
@@ -0,0 +1,11 @@
+// Copyright 2014 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 nacl plan9
+
+package nettest
+
+func protocolNotSupported(err error) bool {
+ return false
+}
diff --git a/internal/nettest/stack.go b/internal/nettest/stack.go
index a3b602e..3fac559 100644
--- a/internal/nettest/stack.go
+++ b/internal/nettest/stack.go
@@ -28,3 +28,9 @@
ln.Close()
return true
}
+
+// ProtocolNotSupported reports whether err is a protocol not
+// supported error.
+func ProtocolNotSupported(err error) bool {
+ return protocolNotSupported(err)
+}