Skip to content

Commit 45cb2e1

Browse files
committed
net: make Dial, Listen and ListenPacket return consistent error value
Update #4856 R=golang-dev, rsc CC=golang-dev https://golang.org/cl/12763044
1 parent ca3ed9f commit 45cb2e1

File tree

4 files changed

+15
-13
lines changed

4 files changed

+15
-13
lines changed

src/pkg/net/dial.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ func parseNetwork(net string) (afnet string, proto int, err error) {
8585
func resolveAddr(op, net, addr string, deadline time.Time) (Addr, error) {
8686
afnet, _, err := parseNetwork(net)
8787
if err != nil {
88-
return nil, &OpError{op, net, nil, err}
88+
return nil, err
8989
}
9090
if op == "dial" && addr == "" {
91-
return nil, &OpError{op, net, nil, errMissingAddress}
91+
return nil, errMissingAddress
9292
}
9393
switch afnet {
9494
case "unix", "unixgram", "unixpacket":
@@ -148,7 +148,7 @@ func (d *Dialer) Dial(network, address string) (Conn, error) {
148148

149149
func dial(net, addr string, la, ra Addr, deadline time.Time) (c Conn, err error) {
150150
if la != nil && la.Network() != ra.Network() {
151-
return nil, &OpError{"dial", net, ra, errors.New("mismatched local addr type " + la.Network())}
151+
return nil, &OpError{Op: "dial", Net: net, Addr: ra, Err: errors.New("mismatched local address type " + la.Network())}
152152
}
153153
switch ra := ra.(type) {
154154
case *TCPAddr:
@@ -164,7 +164,7 @@ func dial(net, addr string, la, ra Addr, deadline time.Time) (c Conn, err error)
164164
la, _ := la.(*UnixAddr)
165165
c, err = dialUnix(net, la, ra, deadline)
166166
default:
167-
err = &OpError{"dial", net + " " + addr, ra, UnknownNetworkError(net)}
167+
err = &OpError{Op: "dial", Net: net, Addr: ra, Err: &AddrError{Err: "unexpected address type", Addr: addr}}
168168
}
169169
if err != nil {
170170
return nil, err
@@ -186,15 +186,16 @@ func (a stringAddr) String() string { return a.addr }
186186
func Listen(net, laddr string) (Listener, error) {
187187
la, err := resolveAddr("listen", net, laddr, noDeadline)
188188
if err != nil {
189-
return nil, err
189+
return nil, &OpError{Op: "listen", Net: net, Addr: nil, Err: err}
190190
}
191191
switch la := la.(type) {
192192
case *TCPAddr:
193193
return ListenTCP(net, la)
194194
case *UnixAddr:
195195
return ListenUnix(net, la)
196+
default:
197+
return nil, &OpError{Op: "listen", Net: net, Addr: la, Err: &AddrError{Err: "unexpected address type", Addr: laddr}}
196198
}
197-
return nil, UnknownNetworkError(net)
198199
}
199200

200201
// ListenPacket announces on the local network address laddr.
@@ -204,7 +205,7 @@ func Listen(net, laddr string) (Listener, error) {
204205
func ListenPacket(net, laddr string) (PacketConn, error) {
205206
la, err := resolveAddr("listen", net, laddr, noDeadline)
206207
if err != nil {
207-
return nil, err
208+
return nil, &OpError{Op: "listen", Net: net, Addr: nil, Err: err}
208209
}
209210
switch la := la.(type) {
210211
case *UDPAddr:
@@ -213,6 +214,7 @@ func ListenPacket(net, laddr string) (PacketConn, error) {
213214
return ListenIP(net, la)
214215
case *UnixAddr:
215216
return ListenUnixgram(net, la)
217+
default:
218+
return nil, &OpError{Op: "listen", Net: net, Addr: la, Err: &AddrError{Err: "unexpected address type", Addr: laddr}}
216219
}
217-
return nil, UnknownNetworkError(net)
218220
}

src/pkg/net/dial_gen.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func resolveAndDialChannel(net, addr string, localAddr Addr, deadline time.Time)
2424
if timeout <= 0 {
2525
ra, err := resolveAddr("dial", net, addr, noDeadline)
2626
if err != nil {
27-
return nil, err
27+
return nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}
2828
}
2929
return dial(net, addr, localAddr, ra, noDeadline)
3030
}
@@ -42,7 +42,7 @@ func resolveAndDialChannel(net, addr string, localAddr Addr, deadline time.Time)
4242
}
4343
ra, err := resolveAddr("dial", net, addr, noDeadline)
4444
if err != nil {
45-
ch <- pair{nil, err}
45+
ch <- pair{nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}}
4646
return
4747
}
4848
resolvedAddr <- ra // in case we need it for OpError
@@ -64,7 +64,7 @@ func resolveAndDialChannel(net, addr string, localAddr Addr, deadline time.Time)
6464
Op: "dial",
6565
Net: net,
6666
Addr: ra,
67-
Err: &timeoutError{},
67+
Err: errTimeout,
6868
}
6969
return nil, err
7070
case p := <-ch:

src/pkg/net/fd_unix.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func sysInit() {
4141
func resolveAndDial(net, addr string, localAddr Addr, deadline time.Time) (Conn, error) {
4242
ra, err := resolveAddr("dial", net, addr, deadline)
4343
if err != nil {
44-
return nil, err
44+
return nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}
4545
}
4646
return dial(net, addr, localAddr, ra, deadline)
4747
}

src/pkg/net/fd_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func resolveAndDial(net, addr string, localAddr Addr, deadline time.Time) (Conn,
8787
}
8888
ra, err := resolveAddr("dial", net, addr, deadline)
8989
if err != nil {
90-
return nil, err
90+
return nil, &OpError{Op: "dial", Net: net, Addr: nil, Err: err}
9191
}
9292
return dial(net, addr, localAddr, ra, deadline)
9393
}

0 commit comments

Comments
 (0)