]> Cypherpunks repositories - gostls13.git/commitdiff
net: make Dial, Listen and ListenPacket return consistent error value
authorMikio Hara <mikioh.mikioh@gmail.com>
Tue, 13 Aug 2013 22:04:39 +0000 (07:04 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Tue, 13 Aug 2013 22:04:39 +0000 (07:04 +0900)
Update #4856

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/12763044

src/pkg/net/dial.go
src/pkg/net/dial_gen.go
src/pkg/net/fd_unix.go
src/pkg/net/fd_windows.go

index b18d283626c71203d4884422756ef96dcd84d17e..b6ed830511f92cea077726591aa89455374e52b5 100644 (file)
@@ -85,10 +85,10 @@ func parseNetwork(net string) (afnet string, proto int, err error) {
 func resolveAddr(op, net, addr string, deadline time.Time) (Addr, error) {
        afnet, _, err := parseNetwork(net)
        if err != nil {
-               return nil, &OpError{op, net, nil, err}
+               return nil, err
        }
        if op == "dial" && addr == "" {
-               return nil, &OpError{op, net, nil, errMissingAddress}
+               return nil, errMissingAddress
        }
        switch afnet {
        case "unix", "unixgram", "unixpacket":
@@ -148,7 +148,7 @@ func (d *Dialer) Dial(network, address string) (Conn, error) {
 
 func dial(net, addr string, la, ra Addr, deadline time.Time) (c Conn, err error) {
        if la != nil && la.Network() != ra.Network() {
-               return nil, &OpError{"dial", net, ra, errors.New("mismatched local addr type " + la.Network())}
+               return nil, &OpError{Op: "dial", Net: net, Addr: ra, Err: errors.New("mismatched local address type " + la.Network())}
        }
        switch ra := ra.(type) {
        case *TCPAddr:
@@ -164,7 +164,7 @@ func dial(net, addr string, la, ra Addr, deadline time.Time) (c Conn, err error)
                la, _ := la.(*UnixAddr)
                c, err = dialUnix(net, la, ra, deadline)
        default:
-               err = &OpError{"dial", net + " " + addr, ra, UnknownNetworkError(net)}
+               err = &OpError{Op: "dial", Net: net, Addr: ra, Err: &AddrError{Err: "unexpected address type", Addr: addr}}
        }
        if err != nil {
                return nil, err
@@ -186,15 +186,16 @@ func (a stringAddr) String() string  { return a.addr }
 func Listen(net, laddr string) (Listener, error) {
        la, err := resolveAddr("listen", net, laddr, noDeadline)
        if err != nil {
-               return nil, err
+               return nil, &OpError{Op: "listen", Net: net, Addr: nil, Err: err}
        }
        switch la := la.(type) {
        case *TCPAddr:
                return ListenTCP(net, la)
        case *UnixAddr:
                return ListenUnix(net, la)
+       default:
+               return nil, &OpError{Op: "listen", Net: net, Addr: la, Err: &AddrError{Err: "unexpected address type", Addr: laddr}}
        }
-       return nil, UnknownNetworkError(net)
 }
 
 // ListenPacket announces on the local network address laddr.
@@ -204,7 +205,7 @@ func Listen(net, laddr string) (Listener, error) {
 func ListenPacket(net, laddr string) (PacketConn, error) {
        la, err := resolveAddr("listen", net, laddr, noDeadline)
        if err != nil {
-               return nil, err
+               return nil, &OpError{Op: "listen", Net: net, Addr: nil, Err: err}
        }
        switch la := la.(type) {
        case *UDPAddr:
@@ -213,6 +214,7 @@ func ListenPacket(net, laddr string) (PacketConn, error) {
                return ListenIP(net, la)
        case *UnixAddr:
                return ListenUnixgram(net, la)
+       default:
+               return nil, &OpError{Op: "listen", Net: net, Addr: la, Err: &AddrError{Err: "unexpected address type", Addr: laddr}}
        }
-       return nil, UnknownNetworkError(net)
 }
index 19f8681682152194c9ca3efdf1c7ac3641202c83..4fb1c7ad94c8429c5a67e42457f47b67d3cb0ed2 100644 (file)
@@ -24,7 +24,7 @@ func resolveAndDialChannel(net, addr string, localAddr Addr, deadline time.Time)
        if timeout <= 0 {
                ra, err := resolveAddr("dial", net, addr, noDeadline)
                if err != nil {
-                       return nil, err
+                       return nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}
                }
                return dial(net, addr, localAddr, ra, noDeadline)
        }
@@ -42,7 +42,7 @@ func resolveAndDialChannel(net, addr string, localAddr Addr, deadline time.Time)
                }
                ra, err := resolveAddr("dial", net, addr, noDeadline)
                if err != nil {
-                       ch <- pair{nil, err}
+                       ch <- pair{nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}}
                        return
                }
                resolvedAddr <- ra // in case we need it for OpError
@@ -64,7 +64,7 @@ func resolveAndDialChannel(net, addr string, localAddr Addr, deadline time.Time)
                        Op:   "dial",
                        Net:  net,
                        Addr: ra,
-                       Err:  &timeoutError{},
+                       Err:  errTimeout,
                }
                return nil, err
        case p := <-ch:
index f704c0a2a0a61d850ec9850be1502ab06ebcce7d..f475cf45dbf8da517ec10669976b9b33618e4a0f 100644 (file)
@@ -41,7 +41,7 @@ func sysInit() {
 func resolveAndDial(net, addr string, localAddr Addr, deadline time.Time) (Conn, error) {
        ra, err := resolveAddr("dial", net, addr, deadline)
        if err != nil {
-               return nil, err
+               return nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}
        }
        return dial(net, addr, localAddr, ra, deadline)
 }
index ff0190240b9566cb7c9484da5ca641158258e0a4..d9c3a3cb26720b84ce2b4556d38ec9e213c05a69 100644 (file)
@@ -87,7 +87,7 @@ func resolveAndDial(net, addr string, localAddr Addr, deadline time.Time) (Conn,
        }
        ra, err := resolveAddr("dial", net, addr, deadline)
        if err != nil {
-               return nil, err
+               return nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}
        }
        return dial(net, addr, localAddr, ra, deadline)
 }