Commit 80abe2fc authored by Mikio Hara's avatar Mikio Hara

net: make spuriousENOTAVAIL to be able to parse EADDRNOTAVAIL correctly

Change-Id: I82e3aadbd18fccb98a76d1c36876510f5e1c3089
Reviewed-on: https://go-review.googlesource.com/12750Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent a7e81c37
......@@ -6,7 +6,11 @@
package net
import "syscall"
import (
"os"
"syscall"
"testing"
)
var (
errTimedout = syscall.ETIMEDOUT
......@@ -17,3 +21,24 @@ func isPlatformError(err error) bool {
_, ok := err.(syscall.Errno)
return ok
}
func TestSpuriousENOTAVAIL(t *testing.T) {
for _, tt := range []struct {
error
ok bool
}{
{syscall.EADDRNOTAVAIL, true},
{&os.SyscallError{Syscall: "syscall", Err: syscall.EADDRNOTAVAIL}, true},
{&OpError{Op: "op", Err: syscall.EADDRNOTAVAIL}, true},
{&OpError{Op: "op", Err: &os.SyscallError{Syscall: "syscall", Err: syscall.EADDRNOTAVAIL}}, true},
{syscall.EINVAL, false},
{&os.SyscallError{Syscall: "syscall", Err: syscall.EINVAL}, false},
{&OpError{Op: "op", Err: syscall.EINVAL}, false},
{&OpError{Op: "op", Err: &os.SyscallError{Syscall: "syscall", Err: syscall.EINVAL}}, false},
} {
if ok := spuriousENOTAVAIL(tt.error); ok != tt.ok {
t.Errorf("spuriousENOTAVAIL(%v) = %v; want %v", tt.error, ok, tt.ok)
}
}
}
......@@ -230,8 +230,13 @@ func selfConnect(fd *netFD, err error) bool {
}
func spuriousENOTAVAIL(err error) bool {
e, ok := err.(*OpError)
return ok && e.Err == syscall.EADDRNOTAVAIL
if op, ok := err.(*OpError); ok {
err = op.Err
}
if sys, ok := err.(*os.SyscallError); ok {
err = sys.Err
}
return err == syscall.EADDRNOTAVAIL
}
// TCPListener is a TCP network listener. Clients should typically
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment