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":
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:
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
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.
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:
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)
}
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)
}
}
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
Op: "dial",
Net: net,
Addr: ra,
- Err: &timeoutError{},
+ Err: errTimeout,
}
return nil, err
case p := <-ch: