func setWriteBuffer(fd *netFD, bytes int) error {
return syscall.EPLAN9
}
+
+func skipRawSocketTests() (skip bool, skipmsg string, err error) {
+ return true, "skipping test on plan9", nil
+}
func closesocket(s int) error {
return syscall.Close(s)
}
+
+func skipRawSocketTests() (skip bool, skipmsg string, err error) {
+ if os.Getuid() != 0 {
+ return true, "skipping test; must be root", nil
+ }
+ return false, "", nil
+}
return netfd, nil
}
+func skipRawSocketTests() (skip bool, skipmsg string, err error) {
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548.aspx:
+ // Note: To use a socket of type SOCK_RAW requires administrative privileges.
+ // Users running Winsock applications that use raw sockets must be a member of
+ // the Administrators group on the local computer, otherwise raw socket calls
+ // will fail with an error code of WSAEACCES. On Windows Vista and later, access
+ // for raw sockets is enforced at socket creation. In earlier versions of Windows,
+ // access for raw sockets is enforced during other socket operations.
+ s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, 0)
+ if err == syscall.WSAEACCES {
+ return true, "skipping test; no access to raw socket allowed", nil
+ }
+ if err != nil {
+ return true, "", err
+ }
+ defer syscall.Closesocket(s)
+ return false, "", nil
+}
+
// Unimplemented functions.
func (fd *netFD) dup() (*os.File, error) {
}
}
+func skipRawSocketTest(t *testing.T) (skip bool, skipmsg string) {
+ skip, skipmsg, err := skipRawSocketTests()
+ if err != nil {
+ t.Fatal(err)
+ }
+ return skip, skipmsg
+}
+
func TestResolveIPAddr(t *testing.T) {
for _, tt := range resolveIPAddrTests {
addr, err := ResolveIPAddr(tt.net, tt.litAddrOrName)
}
func TestConnICMPEcho(t *testing.T) {
- switch runtime.GOOS {
- case "plan9":
- t.Skipf("skipping test on %q", runtime.GOOS)
- case "windows":
- if testing.Short() || !*testExternal {
- t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
- }
- default:
- if os.Getuid() != 0 {
- t.Skip("skipping test; must be root")
- }
+ if skip, skipmsg := skipRawSocketTest(t); skip {
+ t.Skip(skipmsg)
}
for i, tt := range icmpEchoTests {
}
func TestPacketConnICMPEcho(t *testing.T) {
- switch runtime.GOOS {
- case "plan9":
- t.Skipf("skipping test on %q", runtime.GOOS)
- case "windows":
- if testing.Short() || !*testExternal {
- t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
- }
- default:
- if os.Getuid() != 0 {
- t.Skip("skipping test; must be root")
- }
+ if skip, skipmsg := skipRawSocketTest(t); skip {
+ t.Skip(skipmsg)
}
for i, tt := range icmpEchoTests {
// port.
func TestIPv4MulticastListener(t *testing.T) {
switch runtime.GOOS {
- case "windows":
- if testing.Short() || !*testExternal {
- t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
- }
case "plan9":
t.Skipf("skipping test on %q", runtime.GOOS)
}
case "udp":
return []byte("UDP PACKETCONN TEST"), nil
case "ip":
- switch runtime.GOOS {
- case "plan9":
+ if skip, skipmsg := skipRawSocketTest(t); skip {
return nil, func() {
- t.Logf("skipping %q test on %q", net, runtime.GOOS)
- }
- case "windows":
- if testing.Short() || !*testExternal {
- t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
- }
- default:
- if os.Getuid() != 0 {
- return nil, func() {
- t.Logf("skipping %q test; must be root", net)
- }
+ t.Logf(skipmsg)
}
}
b, err := (&icmpMessage{
}
func TestIPConnSpecificMethods(t *testing.T) {
- switch runtime.GOOS {
- case "plan9":
- t.Skipf("skipping test on %q", runtime.GOOS)
- case "windows":
- if testing.Short() || !*testExternal {
- t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
- }
- default:
- if os.Getuid() != 0 {
- t.Skipf("skipping test; must be root")
- }
+ if skip, skipmsg := skipRawSocketTest(t); skip {
+ t.Skip(skipmsg)
}
la, err := ResolveIPAddr("ip4", "127.0.0.1")
ERROR_OPERATION_ABORTED Errno = 995
ERROR_IO_PENDING Errno = 997
ERROR_NOT_FOUND Errno = 1168
+ WSAEACCES Errno = 10013
)
const (