net: use better error messages on windows
Fixes #4320.
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6810064
diff --git a/src/pkg/net/fd_unix.go b/src/pkg/net/fd_unix.go
index 828e998..ee82ead 100644
--- a/src/pkg/net/fd_unix.go
+++ b/src/pkg/net/fd_unix.go
@@ -7,7 +7,6 @@
package net
import (
- "errors"
"io"
"os"
"runtime"
@@ -346,8 +345,6 @@
return err
}
-var errClosing = errors.New("use of closed network connection")
-
// Add a reference to this fd.
// If closing==true, pollserver must be locked; mark the fd as closing.
// Returns an error if the fd cannot be used.
diff --git a/src/pkg/net/fd_windows.go b/src/pkg/net/fd_windows.go
index f94f082..040439a 100644
--- a/src/pkg/net/fd_windows.go
+++ b/src/pkg/net/fd_windows.go
@@ -196,11 +196,12 @@
}
// Wait for our request to complete.
var r ioResult
- var cancelled bool
+ var cancelled, timeout bool
select {
case r = <-o.resultc:
case <-timer:
cancelled = true
+ timeout = true
case <-o.fd.closec:
cancelled = true
}
@@ -220,7 +221,11 @@
// Wait for IO to be canceled or complete successfully.
r = <-o.resultc
if r.err == syscall.ERROR_OPERATION_ABORTED { // IO Canceled
- r.err = syscall.EWOULDBLOCK
+ if timeout {
+ r.err = errTimeout
+ } else {
+ r.err = errClosing
+ }
}
}
if r.err != nil {
@@ -312,8 +317,6 @@
return syscall.Connect(fd.sysfd, ra)
}
-var errClosing = errors.New("use of closed network connection")
-
// Add a reference to this fd.
// If closing==true, mark the fd as closing.
// Returns an error if the fd cannot be used.
diff --git a/src/pkg/net/net.go b/src/pkg/net/net.go
index 9ebcdbe..d6563e0 100644
--- a/src/pkg/net/net.go
+++ b/src/pkg/net/net.go
@@ -221,6 +221,8 @@
var errTimeout error = &timeoutError{}
+var errClosing = errors.New("use of closed network connection")
+
type AddrError struct {
Err string
Addr string